在HTTPS的传输过程中,有一个非常关键的角色——数字证书,所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
server.csr与client.csr文件必须有CA的签名才可形成证书.
openssl genrsa -des3 -out ca.key 1024
openssl req -new -x509 -key ca.key -out ca.crt -days 3650
注意:此处的描述最好跟生成server.csr时一样,避免不必要的麻烦
为了避免“/etc/pki/CA/index.txt: No such file or directory”、“/etc/pki/CA/serial: No such file or directory”等问题,先执行下述命令
touch /etc/pki/CA/index.txt
touch /etc/pki/CA/serial
echo 01 > /etc/pki/CA/serial
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
mv server.key server1.key
openssl pkcs8 -topk8 -inform PEM -outform PEM -in server1.key -out server.key -nocrypt
本节参考:https://blog.csdn.net/shfqbluestone/article/details/21242323
keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore xxkeystore.jks
这条命令会在生成keystore后接着生成一个密钥对。RSA是非对称密钥算法,也可以改为 keytool支持的其他密钥算法;365代表的是证书的有效期,可以自己指定;xxkeystore.jks是keystroe的名称,也可以自己指定。在cmd命令行输入命令后会提示输入keystore的密码,接着会提示输入名字等信息。
keytool -list -v -keystore xxkeystore.jks
在cmd命令行输入命令后会显示出相关信息
keytool -export -alias certificatekey -keystore xxkeystore.jks -rfc -file xxcert.cer
其中xxcert.cer是导出证书的名称,xxkeystore.jks是1中生成的keystore 文件。
执行上面的命令会要求输入xxkeystore的密码
Keytool -import -alias certificatekey -file xxcert.cer -keystore xxtruststore.jks
其中:xxcert.cer是导出的公钥证书,xxtruststore.jks是生成的truststore的文件名。
这条命令首先会生成一个truststore,然后导入3生成的公钥证书xxcert.cer。cmd执行命令后,首先会提示输入truststore的密码.
keytool -list -v -keystore xxtruststore.jks
其中:xxtruststore.jks是truststore文件名。
到此为止,keystore、truststore、公钥证书都已生成完毕。
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)
注意:该步骤需要输入密码passward,该密码2与3均需要用到
keytool -list -v -keystore server.pfx
keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS -alias 1
其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)
注意:该步骤需要输入3次密码,均采用1中的passward。