用户在申请SSL证书,生成CSR(证书签名请求)时,申请细节至关重要。一个微小的错误可能导致证书申请被拒、安全漏洞或配置失败。下面写一下10个注意的关键细节及其避免错误的方法,帮助你一次性申请成功:
1. 私钥与密钥长度
错误:使用弱密钥(如RSA 1024位)或重复使用旧私钥。
正确做法:
RSA密钥长度至少2048位(推荐3072或4096位以应对未来需求)。
ECC密钥优先选择secp384r1曲线。
每次申请新证书时生成新私钥(旧证书续期除外)。
bash
示例:生成强RSA私钥
openssl genrsa -out example.com.key 3072
2. 主题字段格式规范
错误:字段格式错误(如包含无效字符)、顺序随意或省略关键字段。
正确做法:
国家(C):使用ISO 3166-1二位字母代码(如CN/US)。
州/省(ST):填写全称,避免缩写(如Zhejiang而非ZJ)。
通用名称(CN):
若为单域名证书,填写完整域名(如www.example.com)。
若为通配符证书,格式为*.example.com。
企业证书需准确填写组织名称(O),且与法律实体名一致。
3. 主题备用名称(SAN)扩展
错误:仅依赖CN字段,忽略SAN扩展,导致浏览器警告。
正确做法:
即使单域名证书,也将域名同时填入CN和SAN。
多域名证书需在SAN中列出所有域名(包括CN域名)。
bash
在配置文件中添加SAN
subjectAltName = DNS:example.com, DNS:www.example.com, DNS:mail.example.com
4. 密码学算法选择
错误:使用过时算法(如SHA-1)。
正确做法:
签名哈希算法选择SHA-256或更高(SHA-384/SHA-512)。
在OpenSSL配置或命令中显式指定:
bash
openssl req -new -sha256 -key example.com.key -out example.com.csr
5. CSR文件完整性
错误:手动修改CSR文本、删除头尾标识或损坏格式。
正确做法:
始终通过工具生成和验证,避免手动编辑。
确保CSR包含标准的PEM格式头尾:
text
-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----
6. 避免在线生成器风险
错误:使用不可信的在线CSR生成器,导致私钥泄露。
正确做法:
永远在本地生成CSR和私钥。
使用系统自带工具(如OpenSSL、Keytool)或可信的本地程序。
7. 私钥保护
错误:私钥文件权限过松、存储在Web目录或共享服务器。
正确做法:
设置严格的文件权限(如600或400)。
bash
chmod 600 example.com.key
存储于受限访问目录,并通过加密存储或HSM(硬件安全模块)加强保护。
8. 配置文件的正确使用
错误:完全依赖命令行参数,导致复杂参数(如SAN、扩展属性)遗漏。
正确做法:
使用配置文件(如openssl.cnf)确保一致性,特别是多域名或企业证书。
ini
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = *.example.com
9. 字符编码与大小写
错误:使用非ASCII字符(如中文)、特殊符号或随意使用大小写。
正确做法:
所有字段使用ASCII字符,避免空格和特殊符号(@、#、*等)。
域名部分严格小写(部分CA自动转换,但不应依赖)。
10. 验证CSR内容
错误:未验证CSR内容就直接提交。
正确做法:
提交前解析并确认信息准确:
bash
openssl req -in example.com.csr -noout -text
重点检查:
密钥长度与算法
主题字段与SAN
扩展属性(如密钥用法、基本约束)
快速自查清单
私钥强度≥2048位,且为新生成
CN和SAN包含所有需保护的域名
主题字段符合CA要求(无缩写、无特殊字符)
使用SHA-256或更高哈希算法
私钥权限为600,存储安全
通过openssl req -text验证CSR内容
避免使用在线生成工具
多域名/通配符证书已配置SAN扩展
配置文件(如有)无错误
备份私钥并删除临时文件
综合上面对细节正确处理方式,总结出部署SSL证书,CSR生成是证书部署的基础,错误往往在后续环节才暴露。严格遵循标准流程、使用本地可信工具、并始终验证输出,可节省大量调试时间,并从根本上提升服务安全性。对于企业关键系统,建议建立CSR生成规范文档和自动化脚本,减少人为失误。