数字证书在Linux系统的服务部署、接口调用、安全通信等场景中应用广泛,合理管理数字证书能有效保障系统和服务的安全性。常见的数字证书格式包括PEM、DER、PKCS12等,不同场景需要使用对应格式的证书,同时需要借助openssl等工具完成各类证书操作。
Linux系统常见证书存储路径
Linux系统默认会存储可信的根证书,不同发行版的存储路径略有差异,常见路径如下:
- Ubuntu/Debian系统:
/etc/ssl/certs/存放可信证书,/etc/ssl/private/存放私钥 - CentOS/RHEL系统:
/etc/pki/tls/certs/存放可信证书,/etc/pki/tls/private/存放私钥 - 通用路径:
/usr/local/share/ca-certificates/可存放自定义的根证书,更新后会被系统信任
使用openssl生成自签名证书
自签名证书常用于内部测试场景,不需要向CA机构申请,可直接通过openssl生成,步骤如下:
1. 生成私钥
首先生成RSA私钥,长度为2048位,执行以下命令:
# 生成2048位RSA私钥,保存为server.key openssl genrsa -out server.key 2048
2. 生成证书签名请求(CSR)
使用私钥生成CSR文件,需要填写证书的相关信息,命令如下:
# 生成CSR文件,过程中需要填写国家、省份、组织等信息 openssl req -new -key server.key -out server.csr
3. 生成自签名证书
用私钥和CSR文件生成有效期为365天的自签名证书:
# 生成有效期365天的自签名PEM格式证书 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
查看数字证书信息
可以通过openssl命令查看不同格式证书的具体内容,包括颁发者、有效期、公钥信息等:
查看PEM格式证书
# 查看PEM格式证书的详细信息 openssl x509 -in server.crt -noout -text
查看PKCS12格式证书
PKCS12格式通常包含证书和私钥,查看时需要输入导出时设置的密码:
# 查看p12格式证书内容 openssl pkcs12 -in server.p12 -info
数字证书格式转换
不同服务对证书格式的要求不同,常需要进行格式转换,以下是常见转换场景:
| 转换场景 | 执行命令 |
|---|---|
| PEM转DER | openssl x509 -in server.crt -outform der -out server.der |
| DER转PEM | openssl x509 -in server.der -inform der -outform pem -out server.crt |
| PEM转PKCS12(包含私钥) | openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 |
| PKCS12转PEM(分离证书和私钥) | openssl pkcs12 -in server.p12 -out server_all.pem -nodes |
验证数字证书有效性
验证证书的有效性包括检查证书是否过期、是否被可信CA签发、证书链是否完整等:
验证本地证书有效期
# 检查证书的有效期,输出起始和结束时间 openssl x509 -in server.crt -noout -dates
验证证书链是否完整
如果证书是由中间CA签发的,需要携带完整的证书链进行验证,命令如下:
# 使用CA根证书验证目标证书,chain.pem为完整的证书链 openssl verify -CAfile chain.pem server.crt
证书更新与信任配置
当证书过期或需要更换时,需要更新证书并配置系统信任:
- 替换原有证书文件,确保私钥权限设置为600,证书权限设置为644
- 如果是自定义根证书,放入
/usr/local/share/ca-certificates/目录后,执行update-ca-certificates命令更新系统信任库 - 重启使用证书的服务,让新证书生效
注意:私钥文件需要严格保密,不要将私钥泄露给无关人员,也不要将私钥放在公共可访问的目录下。
常见问题排查
当服务出现证书相关报错时,可以按照以下步骤排查:
- 检查证书路径是否正确,服务是否有权限读取证书和私钥文件
- 检查证书和私钥是否匹配,可通过以下命令验证:
# 对比证书和私钥的公钥哈希,一致则匹配 openssl x509 -in server.crt -noout -modulus | md5sum openssl rsa -in server.key -noout -modulus | md5sum
- 检查证书是否过期,是否被系统信任