Ошибка проверки SSL-сертификата WCF - PullRequest
0 голосов
/ 31 августа 2010

Пытается заставить работать простой Hello World (через SSL), но получает следующую ошибку: Удаленный сертификат недействителен в соответствии с процедурой проверки.

Сервер App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="mexBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <wsHttpBinding>
                <binding name="SSLSecurity">
                    <security mode="Transport">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <services>
            <service behaviorConfiguration="mexBehavior" name="HelloServiceLibrary.HelloService">
                <clear />
                <endpoint address="ws" binding="wsHttpBinding" name="wsEndpoint"
                    contract="HelloServiceLibrary.IHelloService">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>

                <endpoint address="https://localhost:443/hellossl" binding="wsHttpBinding" name="wssslEndpoint"
                    bindingConfiguration="SSLSecurity" contract="HelloServiceLibrary.IHelloService">
                  <identity>
                    <certificateReference x509FindType="FindByThumbprint" findValue="‎82a39faaeb18bf9585b334ca83264add3d5b26ee" />
                    <dns value="localhost" />
                  </identity>
                </endpoint>

                <endpoint address="mex" binding="mexHttpBinding" name="mexEndpoint"
                    contract="IMetadataExchange">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8989/hello" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

Сообщите, что я делаю не так.

Обновление : сертификат успешно развернут в доверенных корневых центрах сертификации на локальном компьютере.

Ответы [ 3 ]

0 голосов
/ 31 августа 2010

Не уверен, что это может вам помочь, но я оглянулся на то, как я настроил свой app.config для простого безопасного сервиса, который я написал несколько недель назад, когда использовал сертификаты. Вот несколько соображений, которые вам, возможно, понадобится сделать, чтобы правильно настроить конфигурацию для службы:

<bindings>
    <wsHttpBinding>
        ...
        <security>
            <transport clientCredentialType="Certificate"  />
        </security>
    </wsHttpBinding>
</bindings>

Теперь в моей конфигурации определено поведение конечной точки, которое предоставляет метаданные, чтобы сообщить службе, что клиент будет использовать для сертификата на своей стороне:

    <behaviors>
        <endpointBehaviors>
            <behavior name="ClientBehavior">
                        <clientCredentials>
                            <clientCertificate findValue="WcfClient" storeLocation="LocalMachine" storeName="My"
                 x509FindType="FindBySubjectName"/>
                            <serviceCertificate>
                                <authentication certificateValidationMode="PeerTrust" />
                            </serviceCertificate>
                        </clientCredentials>
                    </behavior>
        </endpointBehaviors>
    </behaviors>
0 голосов
/ 20 апреля 2011

Если все, что вам нужно, это безопасная ссылка, то есть только шифрование, без аутентификации клиента, то вам не нужно устанавливать учетные данные клиента. Это все, что вам нужно сделать:
1. настроить IIS для использования SSL
2. настроить конечную точку HTTPS на вашем сервисе
3. настроить клиент для использования вышеуказанной конечной точки

Вот и все. Если ваш сертификат недействителен, вам может потребоваться выполнить проверку сертификата, как описано здесь: MSDN .

Удачи!

0 голосов
/ 31 августа 2010

Добавьте это к вашей конфигурации WCF и дайте мне знать результат.

 <system.diagnostics>
    <trace autoflush="true" />
        <sources>
            <source name="System.Net" maxdatasize="1024">
                <listeners>
                    <add name="MyTraceFile"/>
                </listeners>
            </source>
          <source name="System.Net.Sockets" maxdatasize="1024">
                <listeners>
                    <add name="MyTraceFile"/>
                </listeners>
            </source>  
       </sources>

        <sharedListeners>
            <add
              name="MyTraceFile"
              type="System.Diagnostics.TextWriterTraceListener"
              initializeData="System.Net.trace.log"
            />
        </sharedListeners>
        <switches>
            <add name="System.Net" value="Verbose" />
          <add name="System.Net.Sockets" value="Verbose" /> 
        </switches>
</system.diagnostics>

Это удар в темноте.

Убедитесь, что вы установили его для всех пользователей.

Открыть MMC
Добавить оснастку (сертификаты)
- Проверить учетную запись компьютера (Далее)
- Выберите свой компьютер
Готово

Теперь переустановите сертификат в «Доверенные корневые центры сертификации», и он будет доверен всем пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...