![](/img/trans.png)
[英]How to fix RevocationStatusUnknown in asp.net core 3.1 with self-signed client certificate
[英]Cannot authenticate a call to ASP.NET MVC3 service with a self-signed client certificate
我有一個在.NET Framework 4.5的IIS 7.5中運行的ASP.NET MVC3服務,在該服務中,我想使用客戶端證書保護對子路徑之一的訪問。 對於該子路徑,我設計了一個帶有特制屬性的控制器,該屬性將訪問請求客戶端證書
public class CheckCertAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Headers.Add(
"CheckCertAttribute", "entered");
var cert = filterContext.HttpContext.Request.ClientCertificate;
// check the cert here, optionally return HTTP 403
}
}
最初, OnActionExecuting()
被調用,但是Certificate
為null。 原來我需要在web.config中啟用SslNegotiateCert
:
<location path="PathOfInterest">
<system.webServer>
<security>
<access sslFlags="SslNegotiateCert"/>
</security>
</system.webServer>
</location>
一旦執行此操作,客戶端將始終接收HTTP 403,並且不再調用該屬性。
客戶端證書是自簽名的,並導出為.pfx(帶有私鑰),因此我想問題是,一旦它到達服務器端,服務器就不喜歡它並拒絕接受並通過。 客戶端使用HttpWebRequest
:
var cert = new X509Certificate2(pathToPfx, password);
var request = (HttpWebRequest)WebRequest.Create("https://my.company.com/PathOfInterest");
request.ClientCertificates.Add(cert);
request.GetResponse();
我之前已經使用過這種方法,並且有效。 第一種情況是客戶端證書不是自簽名的,而是由中間證書簽名的,而中間證書又由某些受信任的根頒發機構簽名-在這種情況下,我的服務配置非常相似,就可以收到它。 第二種情況是使用自簽名客戶端證書進行Azure管理服務調用,但是在這種情況下,我不知道如何配置服務器端。
因此,我得出的結論是,它是證書的自簽名性質,因此使其“無法正常工作”。 我需要做一些額外的事情-也許將一些內容添加到web.config或將證書添加到服務器端的某些證書存儲中。 我只是不知道這應該是什么。
如何使該設置起作用?
IIS嘗試與客戶端“協商”相互信任的連接,並且由於客戶端證書是自簽名的,因此它拒絕信任它。
您的選擇:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.