生成根证书
Ø 生成CA私钥
u openssl genrsa -out ca/ca-key.pem 1024
Ø 用刚才生成的CA私钥 生成一个待签名的证书 ca-req.csr(Certificate Signing Request)
u openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem -config "E:/Program Files/Java/openssl/openssl.cnf“
Ø 用CA私钥ca-key.pem自签名ca-req.csr,得到ca-cert.pem 这个就是我们导入IE的CA根证书
u openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
这里我把有效期写了10年,因为这是根证书,后面server和client端的证书都要用它来签名,所以有效期很长,而且这个文件很重要,一定妥善保管,如果丢了它就无法再发布新的client端证书。
根证书保护
Ø 为了这个证书的安全,我们使用一下命令为其加密。
u openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca-cert.pfx
这个pfx是加密的,使用时需要输入密码来解出需要的ca-cert.pem 和 ca-key.pem
Ø 从PKCS12格式的CA证书导出不加密的CA证书: work/ca/ca-cert.pem
u openssl pkcs12 -in ca/ca-cert.pfx -clcerts -nodes -nokeys -out ca/ca-cert.pem.1
这个文件里多了4行注释,下面命令去掉它也可以手动删掉:
u sed.exe -e '1,4d' work/ca/ca-cert.pem.1 > work/ca/ca-cert.pem
Ø 从PKCS12格式的CA证书导出CA私钥: ca/ca-key.pem
n openssl pkcs12 -in ca/ca-cert.pfx -clcerts -nodes -out file.pem
openssl rsa –in ca/file.pem -out ca/ca-key.pem
生成服务端证书
Ø 生成server密钥对 保存在server/server_keystore里。
u keytool -genkey -alias tomcat5_server -validity 365 -keyalg RSA -keysize 1024 -keystore server/server_keystore
Ø 使用上一步的server_keystore生成待签名证书server.csr
u keytool -certreq -alias tomcat5_server -sigalg MD5withRSA -file server/server.csr -keystore server/server_keystore
Ø 使用CA私钥ca-key.pem和ca-cert.pem 签名server.csr 生成 server-cert.pem
u openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -days 365
导入服务端证书
Ø 导入CA根证书
u keytool -import -v -trustcacerts -alias tomcat5_server -file ca/ca-cert.pem -keystore cacerts
拷贝cacerts文件到C:/j2dk/jre/lib/security目录。这很重要。
Ø 导入服务器证书到server_keystore.
u keytool -import -v -trustcacerts -alias tomcat5_server -file server/server-cert.pem -keystore server/server_keystore
我们生成的server-cert.pem证书是放在cacerts和server_keystore里来使用的。这两个文件有一个相互校验过程。如果不匹配,工作则不正常。
生成client端证书
Ø 生成客户端密钥
openssl genrsa -out client/client-key.pem 1024
Ø 使用 client-key.pem 生成client-req.csr. 准备签名
openssl req -new -out client/client-req.csr -key client/client-key.pem -config "E:/Program Files/Java/openssl/openssl.cnf"
Ø 使用ca-cert.pem 和ca-key.pem签名client-req.csr 产生client-cert.pem证书。
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAserial ca/ca-cert.srl -days 365
Ø 生成Client端可以导入的个人证书 pkcs12
openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
这里有个密码要输入,在导入client.p12到IE里时也需要输入
应用到Tomcat
将server/server_keystore 拷贝到tomcat_home/conf/下 修改 server.xml文件 如下
<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="${catalina.home}/conf/server_keystore" keystorePass=“yourpassword“/>
clientAuth = “true” 表示要客户端认证,False表示不认证