本文主要是介绍OpenSSL的一些知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
OpenSSL的一些知识
- 注:jre 内部实现绑定的 ca 就是 sun 公司(的秘钥和自签名 ca-crt)
- 注:keytool 工具也默认使用 sun 公司做为 ca,故 keytool 会直接用 sun 公司 crt 签名生成我们自己的 ca-crt,这样我们就可以把生成的 ca-crt 用于 jre 目录和 tomcat 目录中用于安全认证
- 注:keytool aa.keystore=aa-key.pem=aa.key aa.cer=aa.crt
名词
- CSR=certificate signing request
身份证申请,即包含公钥和 ID(身份证号码,或者域名)的组合;单纯的 CSR 都是明文的,因为 CSR 只是公钥和 ID 的组合 - CA=certificate authority
证书颁发机构,通常是一个有公信利的机构或组织 - 数字签名(digital signature,简称 signature )
由 CSR 经过 CA 对应的私钥加密后的结果 - CRT=CA signed certificate
经过 CA 签署的身份证:CSR(公钥+ID,是明文)+数字签名 - 自签名 CRT
CA 给自己的公钥和 ID 签名生成的 CRT,公开给第三方,用于验证自己给第三方签名生成的 CRT
公式(A + B 代表 A 和 B 组合,A * B 代表 A 通过秘钥 B 加密)
X-CSR = X-CK + X-ID:明文
X-DS = X-CK * CA-PK:根据 X-CSR 获取 X-CK
X-CRT = X-CSR + X-DS
X-CRT = (X-CK + X-ID) + (X-CK * CA-PK)
CA-CSR = CA-CK + CA-ID:明文
CA-DS = CA-CK * CA-PK:根据 CA-CSR 获取 CA-CK
CA-CRT = CA-CSR + CA-DS(自签名是公开的)
CA-CRT = (CA-CK + CA-ID) + (CA-CK * CA-PK)
验证 X-CRT 可以通过 CA-CRT 验证
- 先从 CA-CRT 的 CA-CSR 明文获取 CA-CK
- 再通过 CA-CK 解密 CA-DS 查看解密结果是否与 CA-CRT 中的 CA-CSR 明文一致
- 再通过 CA-CK 解密 X-CRT 的 X-DS 查看解密结果是否与 X-CRT 中的 X-CSR 明文一致
例子
- 生成 server 公钥-私钥(秘钥对):server-key.pem
openssl genrsa \-out server-key.pem 2048
- 根据 server-key.pem 中的公钥生成 CSR:server-csr.pem
openssl req \-nodes \-new \-key server-key.pem \-subj "/CN=localhost" \-out server-csr.pem
- 生成 CA 公钥-私钥(秘钥对):ca-key.pem
openssl genrsa \-out ca-key.pem 2048
- 生成 CA 的身份证:ca-crt.pem
openssl req \-x509 \-new \-nodes \-key ca-key.pem \-days 10000 \-out ca-crt.pem \-subj "/CN=test-ca"
- 生成 server 的身份证(CRT):server-crt.pem
openssl x509 \-req \-in server-csr.pem \-CA ca-crt.pem \-CAkey ca-key.pem \-CAcreateserial \-out server-crt.pem \-days 365
签署 server-csr.pem 得到 server 的身份证(server-crt.pem)的过程中,不仅需要 CA 的秘钥 ca-key.pem,还需要 CA 的身份证 ca-crt.pem
格式(不同加密套件后缀可能不同,但作用是一样的)
- pem:存储的格式
- key:公钥-私钥(秘钥对)
- csr:公钥+ID
- crt:csr+签名
- srl:CAserial,生成 server-csr.pem 时生成
例子
- aa-key.pem=aa.key
- aa-csr.pem=aa.csr
- aa-crt.pem=aa.crt
- aa-srl.pem=aa.srl
- java.keystore=java-key.pem=java.key
- java.cer=java-crt.pem=java.crt
keystore truestore
- keystore 私钥,服务端使用
- keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore shfqkeystore.jks
- 导出公钥
- keytool -export -alias certificatekey -keystore shfqkeystore.jks -rfc -file shfqcert.ce
- truestore 客户端使用
- Keytool -import -alias certificatekey -file shfqcert.cer -keystore
- keytool –import –file C:/certificate/hello.cer -keystore C:/certificate/hello.keystore
这篇关于OpenSSL的一些知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!