IIS 7.5で.NET MVC3サービスを実行し、.NET Framework 4.5を使用して、サブパスの1つにクライアント証明書。そのサブパスのために私は自己署名入りクライアント証明書を使用して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の要求クライアント証明書にアクセスすることになり、特別に細工された属性で標識されているとコントローラを細工しました。
<location path="PathOfInterest">
<system.webServer>
<security>
<access sslFlags="SslNegotiateCert"/>
</security>
</system.webServer>
</location>
Iこれを行うと、クライアントは常にHTTP 403を受信しないと属性がもはや呼び出されます。私は、web.configファイルでSslNegotiateCert
を有効にする必要が判明しました。
クライアント証明書は自己署名され、.pfx(秘密鍵付き)としてエクスポートされるので、問題がサーバ側に到着するとサーバはそれを好きでなく受け入れてパスすることを拒否することになると思いますスルー。クライアント側はHttpWebRequest
使用しています:
var cert = new X509Certificate2(pathToPfx, password);
var request = (HttpWebRequest)WebRequest.Create("https://my.company.com/PathOfInterest");
request.ClientCertificates.Add(cert);
request.GetResponse();
私はすでに前にこのアプローチを使用しましたし、それが働きました。最初のケースは、クライアント証明書が自己署名されていないものの、中間証明書によって署名された信頼されたルート機関によって署名されたものでした。この場合、私のサービスは非常に似ています。 2番目のケースでは、自己署名付きクライアント証明書を使用してAzure管理サービスの呼び出しを行っていましたが、この場合、サーバー側の設定方法はわかりません。
したがって、証明書が自己署名しているため、「動作しない」という結論に達しました。私は何か余分なことをしています - おそらくweb.configに何かを追加するか、サーバー側の証明書ストアに証明書を追加してください。私はこれが何であるべきか分かりません。
このセットアップを行うにはどうすればよいですか?