我在IIS下有一个asp.net网站,它使用SSL响应443端口。 该网站需要客户端证书进行身份验证 客户端和服务器证书由第三方CA生成,CA安装在Trusted Root Auth上,客户端和服务器证书安装在Trusted People中。 在此配置中,每个具有客户端证书的客户端都可以工作,但如果我从受信任的人员中删除客户端证书,则客户端无法访问,IIS会响应HTTP403。
我是否可以将IIS配置为仅通过链信任来验证客户端证书?
在我的网站上我有一个wcf服务,我必须支持互操作性,我使用了basicHttpsBinding。
这是web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<machineKey validationKey="[...]" decryptionKey="[...]" validation="SHA1"
decryption="AES" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"
httpsHelpPageEnabled="true" />
<!-- I tryed this configuration to force only chain trust but with
no results -->
<!--<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="ChainTrust"
trustedStoreLocation="LocalMachine" revocationMode="NoCheck" />
</clientCertificate>
</serviceCredentials>-->
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true">
<serviceActivations>
<add relativeAddress="V1/MyService.svc" service="MyService" />
</serviceActivations>
</serviceHostingEnvironment>
<bindings>
<basicHttpsBinding>
<binding name="sslHttpsBinding" messageEncoding="Mtom">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpsBinding>
</bindings>
<services>
<service name="MyService">
<endpoint address="" binding="basicHttpsBinding" contract="IMyService"
bindingConfiguration="sslHttpsBinding" />
<endpoint address="Mex" binding="mexHttpsBinding" contract="IMetadataExchange"
/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<directoryBrowse enabled="true" />
<!-- I used rewrite module to mask .svc service extension -->
<rewrite>
<rules>
<rule name="Redirect requests to friendly URLs">
<match url="^(.*?)/(.*)\.svc$" />
<action type="Redirect" url="{R:1}/{R:2}" />
</rule>
<rule name="Rewrite friendly URLs to phsyical paths">
<match url="^(.*)$" />
<action type="Rewrite" url="{R:0}.svc" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我还尝试使用只有index.html页面且没有任何web.config的空网站, 我认为问题在于iis是如何工作的。
我知道iis有一个证书映射模块(一对一或一对多), 但我不会在服务器上的受信任人员中安装客户端证书。
我拥有的CA证书是pem格式,只有公钥,但我认为不是这样。