*.localhost
我尝试使用Nginx 代理请求为 HTTP 和 HTTPS设置通配符localhost:3000
。DNSmasq 用于解析*.localhost
为127.0.0.1
。
对于 HTTP 来说一切都运行正常,但是 HTTPS 连接在 Google Chrome 中收到以下错误:
There are issues with the site's certificate chain (net::ERR_CERT_COMMON_NAME_INVALID).
该证书是我通过设置添加到 Chrome 的自签名证书,它是使用以下命令生成的:
openssl req -x509 -sha256 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -days 3650 -nodes
如下Subject
:
Subject: C=AU, ST=Western Australia, L=Perth, O=Zephon, CN=*.localhost
我的 Nginx 配置如下:
server {
listen 80;
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/localhost.crt;
ssl_certificate_key /etc/nginx/ssl/localhost.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
答案1
因此,最终的答案似乎是你根本无法创建*.localhost
Chrome 可以接受的证书。
我的解决方案是改用*.dev.localhost
,效果很好。
答案2
事实上这是完全有可能的。至于不可能的,则有详尽的记录。
https://letsencrypt.org/docs/certificates-for-localhost/#making-and-trusting-your-own-certificates展示如何生成你自己的本地主机证书
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
然后,您可以确定签署通配符证书需要哪些额外内容。我认为这就像提供前缀一样简单*.
(全局通配符语法)来源
安装自签名证书的文档已记录在stackoverlow 关于 linux
Windows IDK、Mac IDC