![](/img/trans.png)
[英]Configure ASP.NET Core gRPC to use SSL/TLS on both the server and client
[英]How to configure IIS/Asp.Net to use a client Certificate for TLS connection to a server
我正在工作的網站的功能是能夠使用客戶端證書和TLS將數據發布到遠程服務器。
我已獲得p12客戶端證書,並將其安裝/添加到系統中。 該證書在代碼中的使用方式如下(但似乎也只有在安裝到系統時才起作用):
using (var client = new CertificateWebClient("~/ccert.p12"))
{
client.UploadFile(endpoint, filepath);
}
public class CertificateWebClient : WebClient
{
private readonly string _certificateUri;
public CertificateWebClient(string certificateUri)
{
_certificateUri = certificateUri;
}
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var clientCertificate = new X509Certificate(HostingEnvironment.MapPath(_certificateUri));
request.ClientCertificates.Add(clientCertificate);
return request;
}
}
在本地調試應用程序時,我可以選擇允許使用證書:
在服務器上安裝證書后,我設法在IIS外部運行了一個小型測試程序,它可以在沒有任何提示的情況下使用證書。
我無法弄清楚在IIS中的應用程序池下運行時如何使站點使用證書。
到目前為止,我發現的所有內容都是有關添加綁定的,以便證書可用於連接到應用程序的客戶端,而不是使用客戶端證書連接到其他服務器。
如果有任何不同,這適用於Server 2008 R2上的IIS7。
嘗試擴展WebClient並將證書添加到WebRequest,如下所示:
class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.ClientCertificates.Add(new X509Certificate("~/ccert.p12", "password_if_any_or_empty"));
return request;
}
}
似乎使用X509Certificate2
而不是X509Certificate
無需身份驗證即可工作-我認為身份驗證是由於證書是從證書存儲而不是從本地路徑加載的。
下面的類將允許Asp.Net站點通過文件路徑使用自簽名客戶端證書。
public class CertificateWebClient : WebClient
{
private readonly string _certificateUri;
public CertificateWebClient(string certificateUri)
{
_certificateUri = certificateUri;
}
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var clientCertificate = new X509Certificate2(HostingEnvironment.MapPath(_certificateUri), "", X509KeyStorageFlags.MachineKeySet);
request.ClientCertificates.Add(clientCertificate);
return request;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.