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
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)