Ubuntu 上使用 OpenSSL 进行证书管理的实操指南
一 安装与准备
sudo apt update && sudo apt install -y opensslopenssl version -a/usr/lib/ssl/CA(或自建如:/home/ubuntu/pki/demoCA)mkdir -p CA/{certs,crl,newcerts,private}touch CA/index.txtecho 01 > CA/serial/usr/lib/ssl/openssl.cnf 的 [ CA_default ] 段):
dir = /usr/lib/ssl/CAcopy_extensions = copy(便于把 CSR 中的扩展如 subjectAltName 复制到证书)default_days、crlDistributionPoints 等。二 自建根 CA 与签发证书
openssl genrsa -out CA/private/cakey.pem 2048openssl req -new -x509 -key CA/private/cakey.pem -out CA/cacert.pem -utf8 -days 3650 -subj "/C=CN/ST=省份/L=城市/O=组织/OU=部门/CN=Your-Root-CA"openssl genrsa -out server.key 2048csr.conf:[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = CN
ST = 省份
L = 城市
O = 组织
OU = 部门
CN = your.domain.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = your.domain.com
DNS.2 = *.your.domain.com
IP.1 = 192.168.1.10
openssl req -new -key server.key -out server.csr -config csr.confcert.conf:authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:FALSE
keyUsage = digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = your.domain.com
DNS.2 = *.your.domain.com
IP.1 = 192.168.1.10
openssl x509 -req -in server.csr -CA CA/cacert.pem -CAkey CA/private/cakey.pem -CAcreateserial -out server.crt -days 365 -sha256 -extfile cert.confopenssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt。三 常用操作与验证
openssl x509 -in server.crt -text -nooutopenssl verify -CAfile CA/cacert.pem server.crtopenssl x509 -outform der -in server.crt -out server.deropenssl pkcs12 -export -out server.p12 -inkey server.key -in server.crtopenssl genrsa -out client.key 2048openssl req -new -key client.key -out client.csropenssl ca -in client.csr -cert CA/cacert.pem -keyfile CA/private/cakey.pem -out client.crt -days 365。四 吊销与 CRL 管理
openssl ca -revoke /path/to/cert.pemopenssl x509 -in cert.pem -noout -serial -subjectecho 01 > CA/crlnumberopenssl ca -gencrl -out CA/crl/crl.pem -crldays 7openssl crl -in CA/crl/crl.pem -noout -textopenssl.cnf 的 crlDistributionPoints 中配置 URL)。五 在 Nginx 或 Apache 中使用证书
server {
listen 443 ssl;
server_name your.domain.com;
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
sudo nginx -tsudo systemctl restart nginxsudo a2enmod sslSSLCertificateFile /path/to/server.crt 与 SSLCertificateKeyFile /path/to/server.keysudo a2ensite default-ssl && sudo systemctl restart apache2。