簡體   English   中英

如何在不同的網絡上創建和使用基於DNS的自簽名證書

[英]How to create and use a DNS-based self-signed certificate on different networks

我有以下代碼來創建自簽名證書:

SubjectAlternativeNameBuilder subjectAlternativeNameBuilder = new SubjectAlternativeNameBuilder();
subjectAlternativeNameBuilder.AddDnsName("TestSRV01);
X500DistinguishedName x500DistinguishedName = new X500DistinguishedName($"CN=Self-Signed-Test");
using (RSA rsa = RSA.Create(2048))
{
    var certificateRequest = new CertificateRequest(x500DistinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
    certificateRequest.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.DataEncipherment | X509KeyUsageFlags.KeyEncipherment | X509KeyUsageFlags.DigitalSignature, false));        
    certificateRequest.CertificateExtensions.Add(new X509EnhancedKeyUsageExtension(new OidCollection { new Oid("2.5.29.32.0"), new Oid("1.3.6.1.5.5.7.3.1") }, false));
    certificateRequest.CertificateExtensions.Add(subjectAlternativeNameBuilder.Build());
    var certificate = certificateRequest.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650)));
    return new X509Certificate2(certificate.Export( X509ContentType.Cert, pw), pw, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
}

我僅添加服務器的DNS名稱, 以避免綁定到當前IP地址 (測試計算機在不同網絡中移動)。

事實證明,從客戶端連接時,我需要使用IP地址(DNS解析在測試站點上是不可靠的)。

不幸的是,SSL連接失敗並顯示以下消息:

(主機名192.168.0。***未通過驗證:證書:sha256 / UuUOTTQTCb2wu **************************** DN:CN =

我不能將證書綁定到該地址,但是也不能使用域名作為連接參數。

我可以針對此問題創建可用的證書嗎? 還是在計算機啟動時將證書值添加到SubjectAlternativeName列表中,是否應該修改證書值?

根據評論,似乎最好的處理此情況的方法是考慮到Patrick Mevzek的評論中的警告,在客戶端中提供自定義證書驗證。

自定義證書驗證涉及您編寫自己的代碼以驗證證書中的某些方面。 HttpClientHandler類提供了一個ServerCertificateCustomValidationCallback屬性,您可以使用自己的回調對其進行設置。

證書首先由.NET評估,然后此驗證的結果作為SslPolicyErrors枚舉與證書一起傳遞到您的回調中。 您可以使用多個選項來更正驗證錯誤。 例如,請參見此答案以獲取提示。 在回調內部,您可以檢查提示中的主題替代名稱,並確保它是“ TestSRV01”。

X509Certificate2GetNameInfo方法可用於僅檢索主題備用名稱列表中的第一個DNS名稱,因此,如果要檢查的主機名不是第一個,則必須與.NET進行斗爭才能獲得您需要的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM