用certtool生成证书(CA证书,服务器证书,用户证书)
来源: https://www.cnblogs.com/osnosn/p/19057801.html 来自osnosn的博客
写于: 2025-08-25.
- 不想用自签名证书,想在网上申请一个免费服务器证书,见这篇: 去freessl.org申请免费ssl服务器证书
- 用openssl生成证书,着这一篇 "用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)"
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.p12
或ios-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服务器证书
其他工具
-
certtool
debian-11中,安装apt install gnutls-bin
有个命令 certtool,可以方便的制作自签名证书。
参考【重新生成ocserv 的证书】
(2023-10) -
make-ssl-cert
debian中,安装apt install ssl-cert
命令 make-ssl-cert 可以生成自签名证书。
通常系统会用它生成 /etc/ssl/cert/ssl-cert-snakeoil.pem 自签名证书备用。
(2023-10) -
certutil
debian中,安装apt install libnss3-tools
-
keytool
debian中,安装apt install openjdk-11-jre-headless
-
easy-rsa
debian中,安装apt install easy-rsa
-
cert-tool
-
其他参考
【Easysearch 证书:Windows 上创建自签名证书的 7 种方法】【利用GmSSL制作SM2国密证书】【Easysearch 证书:Windows 上创建自签名证书的 7 种方法】【自签名证书工具cfssl详解 】【SSL 证书生成器 免费】【Windows 上创建自签名证书的 7 种方法】
---end---
转载请注明来源。
来源: https://www.cnblogs.com/osnosn/p/19057801.html 来自osnosn的博客
--------- end ---------