生成CSR

  1. # 1. 生成新的CSR和私钥(-nodes 参数指示私钥不需要使用密码加密,domain.key 是生成的私钥,domain.csr 是生成的CSR)
  2. openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
  3. # 2. 使用已有私钥生成CSR(domain.key 是已经存在的私钥)
  4. openssl req -key domain.key -new -out domain.csr
  5. # 3. 使用已有证书生成新的CSR(domain.crt 是已经存在的证书, domain.key 是已经存在的私钥)
  6. openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr

生成SSL证书

  1. # 1. 生成自签名证书(-x509 指示创建自签名证书, -days 365 指定证书的有效期是365天)
  2. openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
  3. # 2. 根据已有私钥生成自签名证书 (domain.key 是已经存在的私钥)
  4. openssl req -key domain.key -new -x509 -days 365 -out domain.crt
  5. # 3. 根据已有私钥和CSR生成自签名证书(domain.key 是已经存在的私钥, domain.csr 是已经存在的CSR)
  6. openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

查看证书

  1. # 1. 查看校验CSR
  2. openssl req -text -noout -verify -in domain.csr
  3. # 2. 查看自签名证书
  4. openssl req -text -noout -verify -in domain.csr
  5. # 3. 查看CA签名的证书(ca.crt 是CA的证书)
  6. openssl verify -verbose -CAFile ca.crt domain.crt

私钥

  1. # 1. 创建私钥(-des3 需要输密码加密私钥)
  2. openssl genrsa -des3 -out domain.key 2048
  3. # 2. 验证私钥
  4. openssl rsa -check -in domain.key
  5. # 3. 验证证书、CSR和私钥一致(openssl md5 这三个命令的输出一样)
  6. openssl rsa -noout -modulus -in domain.key
  7. openssl md5 openssl x509 -noout -modulus -in domain.crt
  8. openssl md5 openssl req -noout -modulus -in domain.csr
  9. # 4. 加密私钥
  10. openssl rsa -des3 -in domain.key -out encrypted-domain.key
  11. # 5. 解密私钥
  12. openssl rsa -in encrypted-domain.key -out domain.key

证书格式

  1. # 1. PEM 转 DER
  2. openssl x509 -in domain.crt -outform der -out domain.der
  3. # 2. DER 转 PEM
  4. openssl x509 -inform der -in domain.der -out domain.crt
  5. # 3. PEM 转 PKCS7(把 domain.crt ca-chain.crt 放到一个文件中)
  6. openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b
  7. # 4. PKCS7 转 PEM(domain.crt 中包含了两个证书)
  8. openssl pkcs7 -in domain.p7b -print_certs -out domain.crt
  9. # 5. 把私钥和证书打包成PKCS12
  10. # 该命令会提示输入密码,留空不设置。
  11. openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx
  12. # 如果有多级CA证书
  13. cat domain.crt intermediate.crt [intermediate2.crt] ... rootCA.crt > cert-chain.txt openssl pkcs12 -inkey domain.key -in cert-chain.txt -export -out domain.pkcs12
  14. # keytool是java工具,把PKCS12转成keystore,用于java软件,jetty,tomcat等。
  15. keytool -importkeystore -srckeystore domain.pfx -srcstoretype PKCS12 -destkeystore keystore
  16. # 使用keytool创建keystore
  17. keytool -keystore keystore -alias jetty -genkey -keyalg RSA -sigalg SHA256withRSA
  18. # 6. 把PKCS12转成PEM
  19. openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt
  20. # 7. P7B 转 PFX/P12
  21. # 7.1. 提取 P7B 文件中的证书链
  22. # -print_certs 输出证书链
  23. # -in P7B 文件
  24. # -out 输出文件路径(PEM格式)
  25. openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
  26. # 7.2. 转换
  27. # -name 设置Entry名称【可选】
  28. # -in pem格式证书/证书链
  29. # -inkey pem格式的私钥文件
  30. # -out 输出文件路径
  31. openssl pkcs12 -export -name xxx -in cert.cer -inkey private.key -out out.pfx

证书操作

  1. # 1. 查看证书指纹
  2. # -sha256 计算sha256指纹【可替换为-sha1计算sha1的指纹】
  3. openssl x509 -fingerprint -sha256 -noout -in certificate.pem

SMIME相关操作

  1. # 1. 转换为 PKCS7 格式
  2. openssl smime -pk7out -inform der -in smime.p7m -out result.pem
  3. # 2. 校验并提取P7M文件中的内容
  4. # -noverify 不进行验证,如果需要验证,则需要指定 -CAfile 等参数
  5. openssl smime -verify -inform der -in smime.p7m -out result.json -noverify

OCSP 查询操作

参考资料: https://doc.primekey.com/ejbca/ejbca-operations/ejbca-ca-concept-guide/protocols/ocsp

  1. # POST 请求
  2. openssl ocsp -issuer Test-CA.pem -CAfile Test-CA.pem -cert Test.pem -req_text -url http://localhost:8080/ejbca/publicweb/status/ocsp
  3. # GET 请求
  4. # 1. 创建 请求文件
  5. openssl ocsp -noverify -no_nonce -reqout ocsp.req -issuer Test-CA.pem -cert Test.pem -url "http://ocsp.wt.trustasia.com/xxx" -header "HOST"="ocsp.wt.trustasia.com" -text
  6. # 2 发送 get 请求
  7. # -H "Content-Type: application/ocsp-request"
  8. # --header "Host: ocsp.wt.trustasia.com"
  9. curl -v -o ocsp.resp --url http://ocsp.wt.trustasia.com/xxx/`base64 -i ocsp.req`
  10. # 3. 解析结果文件
  11. openssl ocsp -noverify -text -respin ocsp.resp