Openssl + JDK keytool 证书制作
1.创建CA的私钥?1.创建CA的私钥?
执行以下命令opensslgenrsa -des3 -out mykey/ca.key 1024 ? ( mykey/ ?当前目录下的mykey目录,事先要建立好)
接下来会提示你输入密码.
2.创建CA证书?(根证书)
openssl req -new -x509 -key mykey/ca.key -out mykey/ca.crt -days 365
x509是一种加密的标准,-out是指输出的文件路径,-key是指定私钥,也就是上一步生成的那个,-days是指证书有效期。
注:再输入commonname时你可以指定你自己的名字,但是不能输入你的服务器名(www.XX.X.com)
?
3.创建server端的私钥?
因为咱们是要在server端提供SSL的webservice,所以在server端需要使用私钥库和信任库。
openssl genrsa -des3 -out??mykey/server.key1024
?
4.创建server证书签名请求?
我们可以发送签名请求到一个官方的CA机构,这些机构都是要收费的,而且还要严格审核,至于我们自己开发过程中的话实在是没必要。我们直接发送到我们刚才通过openssl构建的CA就可以了。
openssl req -new -key??mykey/server.key-out??mykey/server.csr
注意这里的commonname,此处填写你的服务器的ip或者域名,例如localhost,也就是你要为哪台服务器做证书就指定那台机器。
?
5.CA签署server证书?
如果是第一次通过CA签署证书的话,执行如下命令
openssl x509 -req -days 30 -in??mykey/server.csr-CA mykey/ca.crt -CAkey mykey/ca.key -CAcreateserial -out??mykey/server.crt
其中的-CAcreateserial是指创建一个新的序列文件。这样openssl会在当前目录下创建一个名为ca.srl的文件存储序列号(官方是这样说的,我本地产生的序列文件是.srl,搞不清怎么回事,可能是创建时没指定名字吧,不过不影响后面的操作)。下次再次签署证书时就可以直接指定这个序列文件了。命令如下:openssl x509 -req -days 30 -in??mykey/server.csr -CA mykey/ca.crt -CAkey mykey/ca.key-CAserial mykey/ca.srl -out??mykey/server.crt
输入CA私钥的密码后签署成功。
?
6.创建server端的pkcs12文件?
openssl pkcs12 -export -in??mykey/server.crt-inkey??mykey/server.key -out??mykey/server.p12 -name demo_server
注意其中的-namedemo_server,这个是指定keystore的别名,记下来,很重要哦(weblogic要用到)。
?
7.转换pkcs12为JKS keystore文件?
这个过程需要用到jetty.jar,下载相应jar后添加到classpath),然后执行如下命令
java org.mortbay.util.PKCS12Import??mykey/server.p12?mykey/server.jks
如果不添加到classpath,则执行:
java -cp org.mortbay.jetty.jarorg.mortbay.util.PKCS12Import mykey/server.p12 mykey/server.jks
在此处输入上一步设置到export password。
Server端相关文件就完成了,现在可以用java的keytool命令查看一下生成的server.jks的内容
keytool -v -list -keystore??mykey/server.jks
接下来开始准备client端的相关文件,如果server和client相互认证,客户端的相关操作与server端类似,不做过多说明。
?
8.创建client端的私钥?
openssl req -new -newkey rsa:1024 -nodes? -out??mykey/client.req -keyout??mykey/client.key
?
9.创建client端证书签名请求?
openssl x509 -CA mykey/ca.crt -CAkey mykey/ca.key -CAserial mykey/ca.srl -req-in??mykey/client.req -out??mykey/client.pem -days 365
?
10.创建client端的pkcs12文件?
openssl pkcs12 -export -clcerts -in??mykey/client.pem -inkey??mykey/client.key -out??mykey/client.p12
?
11.创建client端的jks文件?
java org.mortbay.util.PKCS12Import??mykey/client.p12?mykey/client.jks
?
12.创建信任密钥库?
这次用到java的keytool命令
keytool -genkey -alias dummy -keyalg RSA -keystore??mykey/truststore.jks
到此为止数字证书的部分就完成了,下面介绍一下tomcat如何配置ssl支持。
?
13.将CA认证过的证书导入信任库
keytool -import -v -trustcacerts-alias my_ca -file mykey/ca.crt -keystore??mykey/truststore.jks
通过下面的命令可以查看信任库的详细信息
keytool -v -list -keystore??mykey/truststore.jks
二、?tomcat ssl支持的配置?
1.?在tomcat的server.xml中添加一个新的connector,配置如下?
?
注:keystoreFile对应server端的jks文件,keystorePass对应其密码
2.?重启tomcat,在浏览器中敲入https://localhost:8443/测试一下??