C#SSL / TLS HTTPS&合法/可信证书错误

时间:2015-12-13 13:50:55

标签: c# ssl mono certificate x509certificate

最近我从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%有效。

亲切的问候!

1 个答案:

答案 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.