java 怎样生成tomcat ssl客户端证书和服务端证书

java 怎样生成tomcat ssl客户端证书和服务端证书,第1张

Gworg获得Tomcat证书与密码,根据以下教程安装。

解释原因:

进入Tomcat安装目录,  d:/apache-tomcat-8.0.18, 把下载的jks文件放在tomcat安装目录即可。d:/apache-tomcat-8.0.18/gworg.com.jks

打开tomcat配置文件 conf/server.xml

tomcat默认一般是8080端口或者 80端口,先找到这一段。

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

3.在这段下面插入下面配置:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" keystoreFile="gworg.com.jks" keystorePass="123456" />

keystoreFile=”gworg.com.jks”            【 jks 文件名需要修改】

keystorePass=”123456″                 【jks密码】

注意事项:

防火墙要允许443端口

使用CDN,需要让CDN服务商安装SSL

Tomcat 6.0上面配置如果无法启动,把protocol修改为 protocol=”HTTP/1.1″

windows平台运行tomcat , bin目录下必须有tcnative-1.dll

JavaKeyStore的类型JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS,JCEKS,PKCS12,BKS,UBER)。JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为PFX文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作,读者可以用Keytool去TryTry。UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。以前,SunJDK(提供者为SUN)允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。证书导入Der/Cer证书导入:要从某个文件中导入某个证书,使用keytool工具的-import命令:1keytool-import-filemycert.der-keystoremykeystore.jks如果在-keystore选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。如果不指定-keystore选项,则缺省密钥仓库将是宿主目录中名为.keystore的文件。如果该文件并不存在,则它将被创建。创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。可使用-list命令来查看密钥仓库里的内容:1keytool-list-rfc-keystoremykeystore.jksP12格式证书导入:keytool无法直接导入PKCS12文件。第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。新生成的pfx不能被导入到keystore中,报错:keytool错误:java.lang.Exception:所输入的不是一个X.509认证。新生成的pfx文件可以被当作keystore使用。但会报个错误asunknownattr1.3.6.1.4.1.311.17.1,查了下资料,说IE导出的就会这样,使用Netscape就不会有这个错误.第三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误:java.io.IOException:failedtodecryptsafecontentsentry。需要通过OpenSSL转换一下:1opensslpkcs12-inmycerts.pfx-outmycerts.pem2opensslpkcs12-export-inmycerts.pem-outmykeystore.p12通过keytool的-list命令可检查下密钥仓库中的内容:1keytool-rfc-list-keystoremykeystore.p12-storetypepkcs12这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。P7B格式证书导入:keytool无法直接导入p7b文件。需要将证书链RootServer.p7b(包含根证书)导出为根rootca.cer和子rootcaserver.cer。将这两个证书导入到可信任的密钥仓库中。1keytool-import-aliasrootca-trustcacerts-filerootca.cer-keystoretestkeytrust.jks遇到是否信任该证书提示时,输入y1keytool-import-aliasrootcaserver-trustcacerts-filerootcaserver.cer-keystoretestkeytrust.jks总结P12格式的证书是不能使用keytool工具导入到keystore中的TheSun'sPKCS12Keystore对从IE和其他的windows程序生成的pfx格式的证书支持不太好.P7B证书链不能直接导入到keystore,需要将里面的证书导出成cer格式,再分别导入到keystore。

Java为安全应用提供了丰富的API,J2SDK1.4

的JSSE

(JavaTM

Secure

Socket

Extension)

包括javax.security.certificate包,并且提供对证书的操作方法,代码如下:

import

javax.swing.*

import

java.awt.*

import

java.awt.event.*

import

javax.swing.table.*

import

java.security.cert.CertificateFactory

import

java.security.cert.X509Certificate

import

java.io.*

public

class

CARead

extends

JPanel

{

private

String

CA_Name

private

String

CA_ItemData[][]

=

new

String[9][2]

private

String[]

columnNames

=

{"证书字段标记","内容"

}

public

CARead(String

CertName)

{

CA_Name=CertName

/*

三个Panel用来显示证书内容*/

JTabbedPane

tabbedPane

=

new

JTabbedPane()

JPanel

panelNormal

=

new

JPanel()

tabbedPane.addTab("普通信息",

panelNormal)

JPanel

panelAll=new

JPanel()

panelAll.setLayout(new

BorderLayout())

tabbedPane.addTab("所有信息",panelAll)

JPanel

panelBase64=new

JPanel()

panelBase64.setLayout(new

BorderLayout())

tabbedPane.addTab("Base64编码信息",panelBase64)

/*

读取证书常规信息

*/

Read_Normal(panelNormal)

/*

读取证书文件字符串表示内容

*/

Read_Bin(panelAll)

/*

读取证原始Base64编码形式的证书文件

*/

Read_Raw(panelBase64)

tabbedPane.setSelectedIndex(0)

setLayout(new

GridLayout(1,

1))

add(tabbedPane)

}

}

定义证书信息的读取函数如下:

private

int

Read_Normal(JPanel

panel){

String

Field

try{

CertificateFactory

certificate_factory=CertificateFactory.getInstance("X.509")

FileInputStream

file_inputstream=new

FileInputStream(CA_Name)

X509Certificate

x509certificate=(X509Certificate)certificate_factory.generateCertificate

(file_inputstream)

Field=x509certificate.getType()

CA_ItemData[0][0]="类型"

CA_ItemData[0][1]=Field

Field=Integer.toString(x509certificate.getVersion())

CA_ItemData[1][0]="版本"

CA_ItemData[1][1]=Field

Field=x509certificate.getSubjectDN().getName()

CA_ItemData[2][0]="标题"

CA_ItemData[2][1]=Field

/*

以下类似,这里省略

Field=x509certificate.getNotBefore().toString()得到开始有效日期

Field=x509certificate.

getNotAfter().toString()得到截止日期

Field=x509certificate.getSerialNumber().toString(16)得到序列号

Field=x509certificate.getIssuerDN().getName()得到发行者名

Field=x509certificate.getSigAlgName()得到签名算法

Field=x509certificate.getPublicKey().getAlgorithm()得到公钥算法

*/

file_inputstream.close()

final

JTable

table

=

new

JTable(CA_ItemData,

columnNames)

TableColumn

tc=null

tc

=

table.getColumnModel().getColumn(1)

tc.setPreferredWidth(600)

panel.add(table)

}catch(Exception

exception){

exception.printStackTrace()

return

-1

}

return

0

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/677029.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-29
下一篇2023-07-29

发表评论

登录后才能评论

评论列表(0条)

    保存