X.509证书怎么操作?

wen python案例 7

本文目录导读:

X.509证书怎么操作?

  1. 生成证书与密钥对
  2. 查看与解析证书内容
  3. 格式转换
  4. 验证证书是否有效
  5. Java KeyStore (JKS) 常用操作
  6. 常见应用配置示例
  7. 总结操作步骤

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
PEMPKCS12 (包含私钥和证书,用于Windows/IIS) openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12 -name “myalias”
PKCS12PEM (提取私钥和证书) openssl pkcs12 -in cert.p12 -out cert.pem -nodes
PEMJKS (Java KeyStore) 需要两步:先转PKCS12,再用 keytool 导入。
keytool -importkeystore -srckeystore cert.p12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS
JKSPKCS12 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>

总结操作步骤

  1. 测试环境 → 直接 openssl req -x509 ... 生成自签名证书。
  2. 申请正式证书openssl genrsa + openssl req 得到CSR → 提交给CA → 收到 .crt 文件。
  3. 日常查看openssl x509 -in cert.crt -text -noout
  4. 环境部署 → 根据服务器软件(Nginx/Apache/Tomcat)选择对应配置并放好证书和私钥。

如果你有具体的操作场景(Windows下如何将pfx导入IIS”或“如何让Chrome信任自签名证书”),可以进一步提问,我可以给出更详细的步骤。

抱歉,评论功能暂时关闭!