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,配置如下
<Connector port="8443" maxHttpHeaderSize="8192" SSLEnabled="true" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/conf/server.jks" keystorePass="XXXXXX" algorithm="SunX509" />