自己生成https证书常见问题?这5个坑一定要避开

发布时间 - 2025-12-20 02:51:25    点击率:

今天折腾了一天https证书的事情,本来以为就是个简单活儿,结果踩坑踩到怀疑人生。干脆把整个过程记下来,给大家提个醒。

开头想得太简单

我寻思着不就是个自签名证书嘛打开终端照着网上的教程敲命令。第一步生成私钥还挺顺利,结果到生成证书签名请求那步就卡住了。系统一直提示我国家代码必须是两位,我才发现我把China整个单词都填进去了。

第一个坑:国家代码要缩写
  • 得填CN不能写全称
  • 省份城市要写拼音不能写汉字
  • 通用名必须和域名完全一致

有效期设置出问题

接着我又栽在证书有效期上。想着省事直接设了十年,结果浏览器死活不认。查了半天才发现现在主流浏览器对自签名证书的有效期要求很严格,超过398天就直接报错。

只能重新生成,这回特意设置了365天。结果又报错,说日期格式不对。原来得用特殊格式指定天数,不能直接写365天。

第二个坑:有效期不能随便设
  • 不能超过398天
  • 得用-days参数指定天数
  • 起始时间自动从生成时刻算起

密钥长度踩雷

生成RSA密钥时光顾着追求安全性,直接选了4096位。结果证书是生成了,但服务器性能掉得厉害。测试时发现TLS握手速度慢了三倍不止,只好退回2048位重新来。

证书链缺失

最坑的是这一步。我把证书部署到服务器后,Chrome一直报隐私设置错误。折腾两个小时才发现是少了中间证书。自签名证书需要把根证书和中间证书都配置上,浏览器才会认。

第三个坑:证书链要完整
  • 需要生成根证书
  • 还要生成中间证书
  • 才是服务器证书

扩展字段忘记配

这个问题最隐蔽。证书明明配置对了,但某些浏览器还是报错。后来才发现在生成证书时忘了加扩展字段,缺少了Subject Alternative Name配置。现在主流的TLS实现都要求有这个字段。

总算把证书搞定了。总结下来就是自签名证书虽然不要钱,但细节真的多。要是用在生产环境,还是建议用正规CA颁发的证书省心。