Java Web サービスを使用する必要がある ac# Web サービス クライアントを実装しています。通信プロトコルはhttpsで、認証は証明書(秘密鍵を含む)で行う必要があります。
私の知る限り、秘密鍵の目的は、Web サービスの背後にある正しい顧客データベースを識別することです。
証明書ファイルの拡張子が「txt」のため、ファイルの形式がわかりません。このファイルを mmc コンソール経由で Windows 証明書ストアにインポートしようとすると、「ファイルの種類を認識できませんでした」というエラーが発生します (ドイツ語から翻訳したため、英語では少し異なるように聞こえる場合があります)。そのため、クライアント アプリはこの証明書を使用できず、証明書ストアで見つかりません。
証明書をインスタンス化し、ファイルの場所をコンストラクターに渡そうとしました。
mVerifyCert = new X509Certificate2(AppConfig.Settings.Default.CertificateAndKeyFileFullName);
しかし、次の例外が発生します (英語では「System.Security.Cryptography.CryptographicException: Object was not found.」のようになります)。
{System.Security.Cryptography.CryptographicException: Das angeforderte Objekt wurde nicht gefunden.
. keyStorageFlags) System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName) System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName)
そのため、ファイルに問題があると考える人もいるかもしれません。ただし、このファイルを SoapUI ツールで使用して Web サービスをテストすると、問題なく動作します。また、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