最近我从LetsEncrypt获得了一个由可信任CA签名的证书。如您所知,这是一个中间CA,它将证书提交给DST根CA X3。
我为四个不同的URL设置了证书,这只是一个例子:
主题:CN = domain.com
SubjectAltName(SAN):www.domain.com,domain.com,www.subdomain.com,subdomain.com
好吧,当我尝试连接到https://www.subdomain.com/index时,它会抛出一个异常,告诉我“从服务器收到的证书无效”。
我知道我没有弄错,因为我可以从任何计算机和传统浏览器访问我的子域。我非常熟悉TLS握手和PKI标准,X509v3 RFC规定所有证书都应该使用SAN(SubjectAltName)字段进行验证(如果不为空),如果为空,则使用CN,但它被认为已弃用。
那么这里发生了什么? WebRequest/HttpWebRequest
是否以正确的方式验证证书(如RFC所述)?嗯,我希望如此,他们忽略了SAN扩展。
我在Fedora 23 x64中使用最新的MonoDevelop,如果有帮助的话。是的,再次,我的证书是合法的,100%有效。
亲切的问候!
答案 0 :(得分:1)
解决!我可以看到Mono的证书商店没有包含证书,甚至不包含Google,所以我运行以下命令来添加LetsEncrypt的根CA:
sudo certmgr -ssl linktohttpsdomain
certmgr -ssl linktohttpsdomain
其中linktohttpsdomain通过https等于您的子域名,抱歉StackOverFlow仍然不允许我通过帖子发布超过2个链接。
另外,还有另一种方式。您可以从运行以下命令的数据库中添加Mozilla的根证书:
mozroots --import --sync
将出现以下输出:
Importing certificates into user store...
140 new root certificates were added to your trust store.
Import process completed.