自签证书这门手艺,现在有点像被塞进储物间的老工具——平时没人想起它,证书一掉签,半夜就得翻出来擦灰。真到那时候,「证书掉了怎么自签」这个问题,我一般先反问一句:你是想临时顶两天,还是打算长期就这么跑?这两个答案走的路完全不一样,先想清楚,能省掉半宿的折腾。

证书掉了怎么自签,先分清是真掉还是假掉
原理不复杂,就是自己给自己当 CA。openssl 生成一对密钥,用私钥签一张证书,签发者那一栏填自己。它管的是「这条连接能不能加密」,管不了「浏览器信不信你」,这两件事混在一起的人特别多,然后就白忙一晚上。
掉证书的现场,至少一半不是证书本身坏了。服务器时间跑到两年前,一样报「证书已过期」;nginx 配了 ssl_certificate 忘了 ssl_certificate_key,直接起不来;只给叶子证书不给中间证书,某些浏览器就不放行;CDN 回源那层还挂着旧证书,用户看到的还是旧那张。这些不先排掉,自签一百遍也没用。
一条命令能跑,跑对得加两样东西
网上搜来搜去就那一条:openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj “/CN=example.com”。跑完拿到 key.pem 和 cert.pem,五分钟不到的事。坑在细节里。
一个是 -nodes 表示私钥不加密,文件别乱扔,chmod 600,别跟网站根目录放一个地方。另一个是只写 CN 已经不够了,浏览器现在只认 subjectAltName,补上 -addext “subjectAltName=DNS:example.com,DNS:www.example.com”,泛域名就写 DNS:example.com 加 DNS:*.example.com。-days 可以写长,自签的好处就是你想签多久签多久,但到期它也是会到的,别忘了。
配到 web 服务器上,nginx 就是 ssl_certificate 指 cert.pem、ssl_certificate_key 指 key.pem,nginx -t 过了再 reload。Apache 那边是 SSLCertificateFile 和 SSLCertificateKeyFile。验的时候 curl -k -I https://你的域名,通就行;不带 -k 报错是对的,因为你自己还没被自己信任。要给 IIS 用,再走一遍 openssl pkcs12 -export 转 pfx。
自签适合哪些地方,不适合哪些
内网系统、测试环境、本地联调、公司内部后台、新买的网络设备第一次配网、给自家客户端做双向认证,这些自签特别合适,因为两头都是自己人。要多张证书的话,可以建一个自己的根 CA,拿它签好几张叶子证书,客户端只要导入一次根就全认了,比一张张导省事。
反过来,对外的官网、商城、登录页、支付回调,别用。用户看到「您的连接不是私密连接」,得展开、点高级、再点「继续前往」,大部分人到第二步就关了。搜索引擎那边也不会把一个需要点继续的站当正常站点看,具体口径以各家搜索官方文档为准,反正不会给这种站加分。
想让浏览器点头,只能手动导根证书
自签要变「可信」,就得把证书装进系统信任库。Windows 开 certmgr.msc 导到「受信任的根证书颁发机构」;macOS 进钥匙串设成始终信任;Firefox 有独立证书库,得单独导一次;安卓从 7 开始应用默认不信任用户自己装的 CA;iOS 装完描述文件还得去「关于本机—证书信任设置」开那个开关。
一圈走下来你就懂了,这条路只在自己能摸到设备的时候成立。给客户装?不现实。所以自签省下的那点钱和流程,本质上换来的是「每次都要人肉操作」。
干脆换新的,三条路加一道硬门槛
正规换新大概三条路:免费 DV,像 Let’s Encrypt 那类,90 天一轮,acme.sh 或 certbot 挂着自动续,最省钱;付费 DV,一年期,云厂商和证书商都有,图省心;OV/EV 要交材料审核,一般是企业站有合规或者投标要求才上。价格和签发规则各家活动不一样,以服务商和 CA 官方页面说明为准,别信二手贩子拍胸脯。
真正的门槛不在钱,在域名控制权。验证方式就那么几种:HTTP 放验证文件、DNS 加 TXT 记录、邮箱收信。域名不在你手上、DNS 你也改不了,谁也帮不上。刚过户或者刚转出的域名,解析还没稳就去验证会一直失败,等一阵再试比反复提交强。有 DNS API 的话走 DNS-01 最稳,多域名和泛域名都省事。
几个容易栽的坑
私钥丢了是最常见的死局。有人问能不能「续」一下——不能。续期是拿原来那把私钥重新签,私钥没了等于身份没了,只能重新生成一对再签。所以 key 的备份别和证书放在同一目录同一台机器上,机器一重装,全没了。
还有几个零碎的:服务器时间不同步,NTP 没配,差几分钟就开始报过期,date 看一眼最省事;老证书用 SHA-1 或者 1024 位 RSA,现在基本被拒;证书链顺序拼反,或者把中间证书接在了私钥后面;开了 HSTS 的站,证书一坏浏览器连「继续」都不给点,只能先把那个头摘掉再修。这些排查起来,比自签本身花时间多了。
我自己的处理顺序
拿到一台「证书掉了」的机器,我是这么走的:先 openssl x509 -in cert.pem -noout -dates -subject,看有效期和主体,确认是过期还是压根不是这张;再找私钥,看对得上对不上;接着看时间、看链、看服务器配置和 CDN 那边;确认非换不可了,对外站点直接走正签,内网和测试环境自签五分钟应付过去。
记住一句就够:自签不是「便宜的证书」,它是另一套信任模型,信任建立在你能碰到那台设备上。碰不到用户的设备,就老老实实换新的。顺手在日历里给到期日定个提醒,这比半夜翻储物间舒服得多。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!