Проблемы аутентификации .net C # клиента на Java Webservice через https и сертификат - PullRequest
0 голосов
/ 12 ноября 2011

Я реализую клиент веб-сервиса c #, который должен использовать веб-сервис Java. Протокол связи - https, и аутентификация должна выполняться с помощью сертификата (включая закрытый ключ).

Насколько я знаю, цель секретного ключа - определить правильную базу данных клиентов за веб-сервисом.

Я не знаю формат файла сертификата, потому что его расширение файла "txt". Если я пытаюсь импортировать этот файл в хранилище сертификатов Windows через консоль mmc, возникает ошибка «тип файла не может быть распознан» (я перевел это с немецкого, поэтому на английском он может звучать немного по-другому). Поэтому мое клиентское приложение не может использовать этот сертификат, оно не может найти его в хранилище сертификатов.

Я попытался создать экземпляр сертификата и передать местоположение файла в конструктор.

 mVerifyCert = new X509Certificate2(AppConfig.Settings.Default.CertificateAndKeyFileFullName);

Но тогда возникает следующее исключение (на английском языке это может быть «System.Security.Cryptography.CryptographicException: объект не найден».

{System.Security.Cryptography.CryptographicException: Das angeforderte Objekt wurde nicht gefunden.

bei System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException (Int32 ч) bei System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType (String fileName) bei System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile (строковое имя файла, пароль объекта, X509KeyStorageFlags keyStorageFlags) bei System.Security.Cryptography.X509Certificates.X509Certificate..ctor (String fileName) bei System.Security.Cryptography.X509Certificates.X509Certificate2..ctor (String fileName)

Так что теперь можно подумать, что возникнет проблема с файлом. Но когда этот файл используется с SoapUI Tool для тестирования веб-сервиса, он работает нормально. У меня также есть пример клиентского приложения на Java, который использует этот файл с хранилищем доверенных сертификатов Java, и он отлично работает для клиента Java.

Я также пытался изменить расширение файла с «txt» на «p12», «pem», чтобы иметь возможность импортировать файл в хранилище сертификатов Windows, но безуспешно.

Можете ли вы сказать мне, в чем здесь проблема? Что я могу сделать, чтобы решить это. Понятия не имею.

Вот мой app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="QcsiSync.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <QcsiSync.Properties.Settings>
            <setting name="DefactInstanceXmlFileNameFull" serializeAs="String">
                <value>..\..\Data\getDefactInstance.xml</value>
            </setting>
            <setting name="DefactInstanceXmlDotNet" serializeAs="String">
                <value>..\..\Data\DefactInstanceXmlDotNet.xml</value>
            </setting>
            <setting name="WebServiceUrl" serializeAs="String">
                <value>https://xyz.com/wsAdapter</value>
            </setting>
            <setting name="CertificateFileFullName" serializeAs="String">
                <value>..\..\Data\sdm.crt</value>
            </setting>
            <setting name="CertificateAndKeyFileFullName" serializeAs="String">
                <value>..\..\Data\sdmCert + key.txt</value>
            </setting>
            <setting name="QcSupplierUrl" serializeAs="String">
                <value>https://xyz.net/qcbin</value>
            </setting>
            <setting name="QcSupplierUsername" serializeAs="String">
                <value>xyz</value>
            </setting>
            <setting name="QcSupplierPassword" serializeAs="String">
                <value>xyz</value>
            </setting>
            <setting name="QcSupplierDomain" serializeAs="String">
                <value>xyz</value>
            </setting>
            <setting name="QcSupplierProjetName" serializeAs="String">
                <value>xyz</value>
            </setting>
        </QcsiSync.Properties.Settings>
    </userSettings>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="WSAdapterBFPortBinding" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
                <binding name="WSAdapterBFPortBinding1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
                <!--<binding name="WSAdapterBFPortBinding2" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>-->
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:8890/wsAdapter" binding="basicHttpBinding"
                bindingConfiguration="WSAdapterBFPortBinding" contract="QcsiWS.WSAdapterBCI"
                name="WSAdapterBFPortHttp" />
            <endpoint address="https://xyz.com/wsAdapter"
                binding="basicHttpBinding" bindingConfiguration="WSAdapterBFPortBinding1"
                contract="QcsiWebService.WSAdapterBCI" name="WSAdapterBFPortHttps" />
        </client>
    </system.serviceModel>
</configuration
...