osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

用certtool生成证书(CA证书,服务器证书,用户证书)

来源: https://www.cnblogs.com/osnosn/p/19057801.html 来自osnosn的博客
写于: 2025-08-25.

certtool

  • debian 中安装工具apt install gnutls-bin

创建证书, ECC证书

创建模板

文档【Certtool's template file format

  • ca模板ca.tmpl
    #C
      country = CN
    #ST
    #  state = BJ
    #L
    #  locality = shanghai
    #O
      organization = my Org
    #unit
    #  ou =my self CA
    #common name
      cn = my self CA
    expiration_days=36523
    #serial=0x2a
    #crl_dist_points = "https://www.getcrl.crl/getcrl/"
    ca
    #path_len = 2
    cert_signing_key
    crl_signing_key
    code_signing_key
    ocsp_signing_key
    #ocsp_uri = https://my.ocsp.server/ocsp
    #ca_issuers_uri = https://my.ca.issuer
    policy1 = 2.5.29.32.0
    policy1_txt = "This is a long policy to summarize"
    policy1_url = https://www.example.com/a-policy-to-read
    #uri = "https://www.example.com/alt_name.html"
    
  • server模板server.tmpl
    #C
      country = CN
    #O
      organization = my Org
    #unit
    #  ou =my self CA
    #common name
      cn=my server
    #serial=22
    expiration_days=7306
    signing_key
    encryption_key
    tls_www_server
    key_purpose_oid=1.3.6.1.4.1.311.10.3.3
    key_purpose_oid=2.16.840.1.113730.4.1
    policy1 = 2.5.29.32.0
    policy1_txt = "This is a long policy to summarize"
    policy1_url = https://www.example.com/a-policy-to-read
    dns_name = "my.doman.com"
    #dns_name = "10.2.3.4"
    #ip_address = "10.2.3.4"
    
  • user模板 client.tmpl
    #C
      country = CN
    #O
      organization = "my home"
    #unit
    #  ou =my self CA
    #common name
      cn = "my client"
    # A user id of the certificate owner.
    uid = "user1"
    #serial=23
    expiration_days = 3653
    tls_www_client
    signing_key
    encryption_key
    

生成证书

(2025-08测)

  • ca
    certtool --key-type ecdsa --curve secp256r1 --generate-privkey --outfile ca-key.pem --pkcs8 --no-text --password=''
    certtool --template ca.tmpl --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem --hash sha512
    
  • server
    certtool --key-type ecdsa --curve secp256r1 --generate-privkey --outfile server-key.pem --pkcs8 --no-text --password=''
    certtool --template server.tmpl --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem --outfile server-cert.pem --hash sha256
    
  • user/client,命令与server相同,仅模板不同
    certtool --key-type ecdsa --curve secp256r1 --generate-privkey --outfile client2-key.pem --pkcs8 --no-text --password=''
    certtool --template client.tmpl --generate-certificate --load-privkey client2-key.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem --outfile client2.pem --hash sha256
    # 打包为.p12文件
    #certtool --load-privkey client2-key.pem --load-certificate client2.pem --pkcs-cipher aes-256 --to-p12 --outder --outfile client2.p12 --p12-name="myhome user1"
    # 为IOS打包.p12文件。ios不支持上一行的加密打包方式。
    certtool --load-privkey client2-key.pem --load-certificate client2.pem --pkcs-cipher 3des-pkcs12 --to-p12 --outder --outfile ios-client2.p12 --p12-name="myhome user1"
    
  • CRL
    # empty crl
    certtool --generate-crl --load-ca-privkey ca-key.pem --load-ca-certificate ca.pem --outfile crl.pem
    # put PEM(one or more) into file: revoked.pem; 把需要吊销的证书(一个或多个)写入 revoked.pem
    certtool --generate-crl --load-ca-privkey ca-key.pem --load-ca-certificate ca.pem --load-certificate revoked.pem --outfile crl.pem
    
  • 查看证书
    certtool -i --load-certificate server-cert.pem
    

这三个文件,就是用于配置web服务器需要的证书。也可以用于WIFI的 PEAP/EAP-TLS认证服务器。
ca.pem , server_cert.pem , server_key.pem
用户证书,也可以用与 EAP-TLS 的wifi认证。
client2.p12ios-client2.p12
(2025-08测)

证书格式转换

如需要,参考以下证书格式转换的指令: (2025-08测)

查看/打印 pem 证书
certtool --certificate-info --infile ca_cert.pem
certtool --certificate-info --infile server_cert.pem
把 pem 转为 der 格式,(证书,密钥)
certtool --certificate-info --infile server_cert.pem --outder --outfile server.cer 服务器证书。
certtool --key-info --infile server_key.pem --outder --outfile server_key.cer 服务器密钥。
把 pem 转为 P12 格式(pfx),(证书,密钥),友好名称不支持utf8中文。
certtool --load-ca-certificate ca_cert.pem --load-privkey server_key.pem --load-certificate server_cert.pem --pkcs-cipher 3des-pkcs12 --to-p12 --outder --outfile server.p12 --p12-name="friendly name"
把 p12 转 jks,
用java的 keytool 工具转换/导入
把 pem 转 pkcs#7 格式,(证书)
certtool --p7-generate --load-certificate server_cert.pem --outfile server.p7b

申请免费证书

不想用自签名证书,那去网上申请一个免费服务器证书吧: 去freessl.org申请免费ssl服务器证书

其他工具

---end---

转载请注明来源。
来源: https://www.cnblogs.com/osnosn/p/19057801.html 来自osnosn的博客
--------- end ---------

posted on 2025-08-25 22:21  osnosn  阅读(43)  评论(0)    收藏  举报