一.写在前面
前天遇到了一个问题就是我用edge和firefox浏览器可以用daxiongx.cn来访问就有ssl证书,但是用google和手机就不行,然后通过我发现是因为我申请的证书没包括daxiongx.cn这个主域名,申请的是www.daxiongx.cn,那为什么edge就可以呢,问了ai,ai说是我以前用edge访问过daxiongx.cn,然后服务做了代理跳转到了www.daxiongx.cn,然后走了缓存才会这样的,这个是测试域名的ssl证书的网站
下面是和ai的对话总结
二.对话
我们刚刚主要排查了 Let's Encrypt 给 daxiongx.cn 主域名补证书 这件事。
1. 你现在的证书情况
你执行了:
bash
sudo certbot certificates
看到当前证书名是:
text
www.daxiongx.cn
证书里已有域名是:
text
www.daxiongx.cn
minio-console.daxiongx.cn
minio.daxiongx.cn
www.ws.daxiongx.cn
xadmin.daxiongx.cn
但是没有主域名:
text
daxiongx.cn
所以 https://daxiongx.cn 在 Chrome 里可能会证书不匹配。
2. 为什么 Edge 能访问,Chrome 不行
因为旧证书没有 daxiongx.cn。
如果 Edge 实际访问的是:
text
http://daxiongx.cn
Nginx 可以先收到 HTTP 请求,然后 301 跳转到:
text
https://www.daxiongx.cn
而 www.daxiongx.cn 在证书里,所以能打开。
但如果 Chrome 直接访问:
text
https://daxiongx.cn
浏览器会先做 TLS 握手和证书校验。旧证书里没有 daxiongx.cn,所以证书校验失败。这个时候 HTTP 请求还没到 Nginx,Nginx 的 301 跳转根本没有机会执行。
所以解决办法就是:把 daxiongx.cn 加进证书里。
之后如果你还想让主域名跳到 www,Nginx 可以这样写:
nginx
server {
listen 443 ssl;
server_name daxiongx.cn;
ssl_certificate /etc/nginx/cert/www.daxiongx.cn.pem;
ssl_certificate_key /etc/nginx/cert/www.daxiongx.cn.key;
return 301 https://www.daxiongx.cn$request_uri;
}
前提是证书已经包含 daxiongx.cn。