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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值