加密API不返回根证书吗?
作者:互联网
我正在努力改编《 Let’s Encrypt for DotNet Core》,改编自这个很棒的文章(https://medium.com/@MaartenSikkema/automatically-request-and-use-lets-encrypt-certificates-in-dotnet-core-9d0d152a59b5).
我有99%的方式到达那里;挑战请求已被接收并接受,我正确地进入了“让我们加密API”端点并接收证书的阶段.
问题是我从API收到的两个证书中,没有一个被视为“根”,在这种情况下,证书IssuerDN等于证书SubjectDN.下面是感兴趣的代码和控制台中的结果行.
var certificates = issuers.Values
.Select(cert => {
Console.WriteLine("IssuerDN: " + cert.IssuerDN.ToString());
Console.WriteLine("SubjectDB: " + cert.SubjectDN.ToString());
Console.WriteLine("========");
return new
{
IsRoot = cert.IssuerDN.Equivalent(cert.SubjectDN),
Cert = cert
};
});
var rootCerts = new HashSet(certificates.Where(c => c.IsRoot).Select(c => new TrustAnchor(c.Cert, null)));
IssuerDN: CN=Fake LE Root X1
SubjectDN: CN=Fake LE Intermediate X1
========
IssuerDN: CN=Fake LE Root X1
SubjectDN: CN=Fake LE Intermediate X1
========
因为没有根证书,所以ACME客户端中断.我相信我已按照上述教程中的每个步骤进行操作,但是有什么想法为什么没有相同的IssuerDN和SubjectDN的证书?谢谢你的时间.
解决方法:
问题是我需要的某些.cer依赖项未标记为嵌入式资源.我使用的代码利用了称为Certes(https://github.com/fszlin/certes)的库来处理ACME通信.我使用DotNet Core和VS Code,这意味着我必须手动添加到csproj中:
<ItemGroup>
<EmbeddedResource Include="**/*.cer" />
</ItemGroup>
如果您正在寻找一种超级棒的方法来使用Let’s Encrypt免费创建DotNet Core应用程序HTTPS,以及许多其他现代功能,我强烈推荐@Maarten的库(https://github.com/Maarten88/rrod)和博客文章系列!
标签:net-core,ssl,https,c,lets-encrypt 来源: https://codeday.me/bug/20191111/2020230.html