数字证书的制作

前言

项目里经常会遇到需要用TSL来保证通讯安全的。CS项目可能会要求服务端和客户端双向认证。而BS项目,一般是单向认证(浏览器认证服务器)。OpenSSL和keytool都是制作证书的工具。但OpenSSL更强大些,一般都是用OpenSSL来制作证书。而java程序要认证加密的证书都存储在KeyStore里面。所以,需要将OpenSSL生成的资料导入到KeyStore中,java程序才能使用。

步骤

  1. 生成根证书(CA)密钥
openssl genrsa -out rootkey.pem 2048

如果需要对密钥加密,使用 -des3 或者 -aes256 等,具体可以参见指令说明

数字证书的制作_第1张图片
生成密钥对

  1. 生成根证书请求文件
  openssl req -new -key rootkey.pem -out root.csr

该步骤需要交互式输入机构信息。

  1. 生成根证书文件
  openssl x509 -req -days 36500 -sha1 -extensions v3_ca -signkey rootkey.pem -in root.csr -out root.crt -extfile /etc/ssl/openssl.cnf

其中,-sha1 指定证书的签名(指纹)算法。
-extensions ,指定引用的扩展信息。这里在使用中遇到一个坑。就是指定了扩展信息,但是生成的证书里却没有,后经查阅,要搭配使用 -extfile 来明确指定openssl.cnf配置文件的位置。
生成证书指令相关参数说明:

数字证书的制作_第2张图片
1.png

数字证书的制作_第3张图片
2.png
  1. 生成服务器端密钥
  openssl genrsa -out serverkey.pem 2048
  1. 生成服务端证书请求文件
  openssl req -new -key serverkey.pem -out server.csr
  1. 用根证书来签发服务器端请求文件,生成服务器端证书
  openssl x509 -req -days 3650 -sha1 -extensions v3_req -in server.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -out server.crt
  1. 打包服务器端证书为pkcs12格式(需要设置密码,请记住)
  openssl pkcs12 -export -in server.crt -inkey serverkey.pem -out server.pkcs12

如果是打包CA证书,则添加参数 -cacerts。如果将ca证书一起打包,则用 -certfile 参数

  1. 生成服务器端keystore(server.jks)。使用keytool的importkeystore指令。pkcs12转jks。需要pkcs12密码和jks密码
keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12
  1. 把根证书加到服务器证书里面
keytool -importcert -keystore server.jks -file root.crt

以上是密钥库的生成,生成的密钥库包含了私钥,不便于发布。
对外发布,需要生成trustkeystore。trustkeystore 不包含私钥

  1. 生成Server端的对外KeyStore。先把根证书放到里面
keytool -importcert -alias ca -keystore servertrust.jks -file root.crt
  1. 把Server证书加到对外KeyStore里面
keytool -importcert -alias servercert -keystore servertrust.jks  -file server.crt

你可能感兴趣的:(数字证书的制作)