本文目录导读:

X.509证书的操作主要分为生成(自签名或申请)、查看/解析、格式转换、验证以及在应用(如Web服务器)中配置这几个核心环节。
下面分别介绍最常用的操作方式,主要基于 OpenSSL(Linux/macOS 通用,Windows可通过WSL或Git Bash使用)和 Java的keytool(Java环境)工具。
生成证书与密钥对
生成自签名证书(测试用最常用)
适用于本地开发或者内部测试,不需要向CA申请。
# 一步到位:生成私钥 + 自签名证书(有效期365天) openssl req -x509 -newkey rsa:2048 -keyout mykey.pem -out mycert.pem -days 365 -nodes # 参数说明: # -x509:直接输出自签名证书 # -newkey rsa:2048:生成2048位RSA私钥 # -keyout:私钥输出文件 # -out:证书输出文件(包含公钥) # -days:有效期 # -nodes:不加密私钥(如果不加,每次使用私钥需要输入密码)
执行后会交互式询问国家、组织、通用名(Common Name, CN,通常是域名或IP)等信息。通用名(CN)必须填写你的域名或IP。
生成证书签名请求(CSR)
用于向正式CA(如Let‘s Encrypt、DigiCert)申请可信任的证书。
# 第一步:先生成私钥 openssl genrsa -out mydomain.key 2048 # 第二步:基于私钥生成CSR openssl req -new -key mydomain.key -out mydomain.csr # 或者一步完成:生成私钥 + CSR openssl req -new -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr
将生成的 mydomain.csr 文件内容(—–BEGIN CERTIFICATE REQUEST—– 开头)复制到CA的申请页面,CA验证后会返回签名后的证书文件(通常是 .crt 或 .pem 格式)。
自建CA并签发证书(模拟CA工作流)
如果需要管理多个内部证书,建议自建CA。
# 1. 创建CA根证书(自签名) openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem -out ca-cert.pem -days 3650 -nodes -subj "/CN=MyRootCA" # 2. 生成服务端私钥和CSR openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr -subj "/CN=myserver.example.com" # 3. 使用CA根证书为服务端CSR签名(生成最终证书) openssl x509 -req -in server.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server.crt -days 365
查看与解析证书内容
查看证书的有效期、使用者、颁发者、公钥信息等。
查看 PEM 格式的证书(文本形式)
openssl x509 -in mycert.crt -text -noout
-text:输出详细信息(Subject, Issuer, Validity, Public Key 等)-noout:不输出原始的 Base64 编码
查看 DER 格式的证书(二进制)
openssl x509 -in cert.der -inform der -text -noout
查看证书的指纹(Fingerprint)
openssl x509 -in mycert.crt -fingerprint -sha256 -noout
只查看证书的有效期
openssl x509 -in mycert.crt -dates -noout
格式转换
不同应用(Nginx、Apache、Java、Windows)需要不同格式。
| 目标格式 | 转换命令 |
|---|---|
| PEM (证书) ↔ DER (二进制) | openssl x509 -in cert.pem -outform der -out cert.der openssl x509 -in cert.der -inform der -out cert.pem |
| PEM (私钥) ↔ DER | openssl rsa -in key.pem -outform der -out key.der openssl rsa -in key.der -inform der -out key.pem |
| PEM → PKCS12 (包含私钥和证书,用于Windows/IIS) | openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12 -name “myalias” |
| PKCS12 → PEM (提取私钥和证书) | openssl pkcs12 -in cert.p12 -out cert.pem -nodes |
| PEM → JKS (Java KeyStore) | 需要两步:先转PKCS12,再用 keytool 导入。 keytool -importkeystore -srckeystore cert.p12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS |
| JKS → PKCS12 | keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 |
验证证书是否有效
验证证书链(使用CA根证书)
# 验证 server.crt 是否由 ca-cert.pem 签发,且未过期 openssl verify -CAfile ca-cert.pem server.crt
验证私钥与证书是否匹配
# 比较两者的 Modulus(模数)是否一致 openssl x509 -in mycert.crt -noout -modulus | openssl md5 openssl rsa -in mykey.pem -noout -modulus | openssl md5 # 如果输出完全一样,说明证书和私钥是匹配的。
验证证书是否在有效期内
openssl x509 -in mycert.crt -checkend 86400 # 检查是否在86400秒(1天)后过期 # 返回 0 表示会过期,返回 1 表示安全
Java KeyStore (JKS) 常用操作
Java 环境使用 keytool 命令管理证书仓库。
# 1. 生成自签名证书并存入JKS(别名 mykey) keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 # 2. 导入CA签发的证书到JKS(如果CSR由keytool生成) keytool -importcert -alias mykey -file certificate.crt -keystore keystore.jks # 3. 查看JKS中的证书 keytool -list -keystore keystore.jks -v # 4. 删除JKS中的某个条目 keytool -delete -alias unwanted_alias -keystore keystore.jks
常见应用配置示例
Nginx(使用PEM格式)
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/your/cert.pem; # 证书文件(含公钥)
ssl_certificate_key /path/to/your/key.pem; # 私钥文件
# 如果有中间证书,合并到 cert.pem 中(服务器证书在上,中间证书在下)
}
Apache(使用PEM格式)
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/cert.pem # 证书文件
SSLCertificateKeyFile /path/to/key.pem # 私钥文件
SSLCertificateChainFile /path/to/chain.pem # 中间证书链(可选)
</VirtualHost>
Tomcat(使用JKS或PKCS12)
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
certificateKeystorePassword="changeit"
type="JKS" />
</SSLHostConfig>
</Connector>
总结操作步骤
- 测试环境 → 直接
openssl req -x509 ...生成自签名证书。 - 申请正式证书 →
openssl genrsa+openssl req得到CSR → 提交给CA → 收到.crt文件。 - 日常查看 →
openssl x509 -in cert.crt -text -noout。 - 环境部署 → 根据服务器软件(Nginx/Apache/Tomcat)选择对应配置并放好证书和私钥。
如果你有具体的操作场景(Windows下如何将pfx导入IIS”或“如何让Chrome信任自签名证书”),可以进一步提问,我可以给出更详细的步骤。