2017-04-13 89 views
3

我正致力於DotNet Core的加密改編,主要來源於這篇出色的文章(https://medium.com/@MaartenSikkema/automatically-request-and-use-lets-encrypt-certificates-in-dotnet-core-9d0d152a59b5)。讓我們加密API不返回根證書?

我有它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 
======== 

由於沒有root證書,ACME客戶端中斷。我相信我已經遵循上述教程中的每一步,但是爲什麼沒有具有相同IssuerDN和SubjectDN的證書的任何想法?謝謝你的時間。

回答

2

的問題是,我需要一定的.CER依賴未標記爲嵌入的資源。我使用的代碼利用這個名爲Certes的庫(https://github.com/fszlin/certes)來處理ACME通信。我使用DOTNET的核心和VS代碼,這意味着我必須手動添加到的csproj:

<ItemGroup> 
    <EmbeddedResource Include="**/*.cer" /> 
</ItemGroup> 

如果你正在尋找一個超級真棒方法,使您DOTNET的核心應用HTTPS免費使用讓我們的加密,數十間其他現代的鐘聲和口哨聲,我強烈推薦@ Maarten的圖書館(https://github.com/Maarten88/rrod)和博客文章系列!

+0

所以你不得不將它添加到Certes csproj文件中?我不明白這是如何工作的,也許是因爲我使用了隱式嵌入.cer文件的不同sdk版本? – Maarten

+0

@Maarten,是的,這是正確的 –

1

感謝您對我的博文的讚美!

爲什麼你想獲得多個證書?它應該工作的方式是它應該生成一個單個證書多個備選名稱如果您通過多個域中。示例代碼是這樣的:

var csr = new CertificationRequestBuilder(); 
csr.AddName("CN", domainNames.First()); // "www.my_domain.com"; 
foreach (var alternativeName in domainNames.Skip(1)) 
{ 
    csr.SubjectAlternativeNames.Add(alternativeName); 
} 
var cert = await client.NewCertificate(csr); 

// Export Pfx 
var pfxBuilder = cert.ToPfx(); 
var pfx = pfxBuilder.Build(domainNames.First(), acmeSettings.PfxPassword); 

看到這裏的示例代碼: https://github.com/Maarten88/rrod/blob/master/src/Webapp/Services/AcmeCertificateManager.cs#L148-L158

+0

很高興收到你的來信,再次感謝你爲這個美好的項目放在一起。是的,那就是我的代碼。我可以確認我正在向Let's Encrypt發出正確的證書請求;實際上我只是限制了速度,所以我切換到了分段URL。我相信我的問題是Certes項目中的.cer文件不會作爲嵌入式資源包含在我的程序集中(https://github.com/fszlin/certes/issues/4)。我不確定如何包括他們,我正在嘗試一切。有任何想法嗎?他們將不勝感激。 –

+0

我做到了!見下文。我想知道爲什麼這不需要包含在你的.csproj中?也許是因爲我沒有使用Visual Studio IDE –