Max*_*ina 5 ssl google-chrome ssl-certificate
我在与通配符证书斗争中度过了美好的一天......
现在,不可能使用 .dev 进行本地开发,所以我们使用 *.test。我需要测试HTTPS,所以我创建了通配符证书。
由于 Chrome v58,“commonName”被忽略,用户应使用 SAN 来指定域名(有关此主题的更多信息:https : //www.thesslstore.com/blog/security-changes-in-chrome-58/)。
无论如何:在我的系统(mac os / Docker / Chrome)上,通配符有问题 - 如果我在证书中指定整个域,它可以工作(如 something.test) - 但是当我使用通配符时,Chrome 仍然会生成此错误消息:NET ::ERR_CERT_COMMON_NAME_INVALID
我尝试了几乎所有可能的方法,但没有运气:(
更多信息:
我的 bash 脚本:
openssl req \
-x509 \
-nodes \
-new \
-newkey rsa:2048 \
-keyout test.key \
-out test.crt \
-sha256 \
-days 3650 \
-config <(cat <<EOF
[ req ]
prompt = no
distinguished_name = subject
x509_extensions = x509_ext
[ subject ]
commonName = *.test
[ x509_ext ]
subjectAltName = @alternate_names
[ alternate_names ]
DNS.1 = *.test
DNS.2 = test
EOF
)
Run Code Online (Sandbox Code Playgroud)
[ alternate_names ]\nDNS.1 = *.test\nDNS.2 = test\n
Run Code Online (Sandbox Code Playgroud)\n您可以用于*.test
个人用途。另请参阅RFC 6761,特殊用途域名。RFC 6761 非常具体,用户软件不应以与任何其他域名不同的方式对待*.test
,因此不要期望浏览器或其他用户代理对*.test
. 问题出在别处。
概括而言,有两个组织发布了公共 PKI 的运行标准。首先是CA/浏览器论坛,发布政策由浏览器遵循。第二个是 IETF,其发布政策被 cURL、OpenSSL 和 Wget 等其他用户代理所遵循。
\n从浏览器的角度来看,*.test
似乎是一个品牌顶级域名(即虚荣域名*.google
)。CA/B基线要求不允许顶级通配符。
相比之下,IETF 并不禁止对顶级域名使用通配符,例如*.com
,*.net
或*.test
。像 cURL 和 Wget 这样的用户代理可能会允许通配符*.test
。
这是来自 CA/B基线要求文档。该规定自 2013 年起生效:
\n\n\n授权域名:
\n用于获取给定 FQDN 的\n证书颁发授权的域名。CA 可以使用从 DNS CNAME 查找返回的 FQDN 作为域验证的 FQDN。如果 FQDN 包含通配符,则 CA 必须从请求的 FQDN 最左侧部分删除所有通配符标签。CA 可以从左到右修剪\n零个或多个标签,直到遇到\n基本域名,并且\n可以使用任何一个中间值来\n进行域验证。
\n
\n\n如果我在证书中指定整个域,它就可以工作(就像
\nsomething.test
)
如果您希望浏览器使用证书,那么您必须使用something.test
或*.something.test
。
或者,使用不同的用户代理,例如 cURL 或 Wget。
\n\n\n但当我使用通配符时,Chrome 仍然生成此错误消息:NET::ERR_CERT_COMMON_NAME_INVALID
\n
和
\n\n\nRun Code Online (Sandbox Code Playgroud)\n[ subject ]\ncommonName = *.test\n
该名称无效,因为您使用了顶级域通配符,并且用户代理遵循 CA/B 颁发策略。
\n此外,在 中添加主机名CommonName
已被弃用多年。在过去的几年里,这种行为并没有被禁止。我了解 CA/B 基线要求很快就会禁止这种行为。IETF 仍然允许这样做。这是来自 CA/B基线要求文档:
\n\n证书字段: subject:commonName (OID 2.5.4.3)
\n
\n必需/可选: 已弃用(不鼓励,但不禁止)
\n内容: 如果存在,此字段必须包含单个 IP 地址或完全限定域名证书\xe2\x80\x99s subjectAltName 扩展中包含的值\n(请参阅\n第 7.1.4.2.1 节)。
缺点是,不要将主机名放入CommonName
. 在那里输入一个友好的名称,例如Example Widgets, LLC。将主机名和其他名称放入SubjectAltName
.
我知道有些证书CommonName
完全省略了。例如,请参见Crypto++ 网站。Crypto++ 网站尝试将通用名称设置为“Crypto++”,因为它是一个友好的名称,但发行者担心“+”符号有时会破坏脚本。所以这个字段被完全省略了。
\n\n如今,不可能使用 .dev 进行本地开发......
\n
这在某种程度上是很有趣的。我有兴趣了解为什么这是不可能的,因为它似乎是开发网络段的不错选择。
\n为了完整起见,我的家庭网络是*.pvt
. 我有一个 CA,可以在需要时颁发证书。我从来没有遇到过任何麻烦。
\n\n无论如何:在我的系统(mac os / Docker / Chrome)上,通配符有问题
\n
有趣的是 Docker 遇到了麻烦。我希望 Docker 能够遵循 IETF 的发布政策并允许它。我不知道他们遵循 CA/B 发布政策并拒绝它。
\nDocker 可能正在运行强化安装并拒绝它。Tim R\xc3\xbchsen 有一个提供libpsl的 GitHub 。我相信 libpsl 会拒绝顶级域上的通配符。
\n