我有一个asmx网络服务,我正在尝试验证客户端证书:
var cert = Context.Request.ClientCertificate.Certificate;
if (cert == null || cert.Length == 0)
{
throw new ArgumentException("certificate can not be found");
}
我的测试代码在控制台应用程序中是这样的:
ServiceReference1.PortfolioImportSoapClient import = new ServiceReference1.PortfolioImportSoapClient();
X509Certificate2 x509 = new X509Certificate2(@"D:\zurichpdf\publickey.cer");
import.ClientCredentials.ClientCertificate.Certificate = x509;
var model = new ServiceReference1.PortfolioMessageModel();
model.ClientID = 1;
import.ImportTransactionPortfolio(model);
我可以看到,从控制台应用程序中,包含了客户端证书。但在服务器端,Context.Request.ClientCertificate.Certificate为空。
我检查了配置文件,它有类似的内容:
<basicHttpBinding>
<binding name="PortfolioImportSoap" >
</binding>
</basicHttpBinding>
有人能告诉我为什么x509证书没有传递给我的asmx网络服务吗?我也应该在这里设置一些安全模式吗?
非常感谢