IIS 7.5需要客户端证书

时间:2014-02-08 09:40:35

标签: asp.net authentication iis certificate

我在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格式,只有公钥,但我认为不是这样。

0 个答案:

没有答案