2017-10-09 5 views
3

クライアントからWebサービスにアクセスするために必要な証明書を自分のPCにインストールしました。しかし、C#のWindowsサービスからWebサービスにアクセスしようとすると、コードから証明書を見つけることができません。ここ は私のコードです:C#のクライアント証明書でWebサービスを呼び出す方法は?

private X509Certificate findCertificate() 
{ 
     X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
     store.Open(OpenFlags.ReadOnly); 
     string certThumbprint = string.Empty; 

     X509Certificate cert = new X509Certificate(); 
     for (int i = 0; i < store.Certificates.Count; i++) 
     { 
      certThumbprint = store.Certificates[i].Thumbprint.ToString().ToUpper(); 
      if (certThumbprint == "‎176455DB76886FF2BA3C122F8B36322F647CB2FD")//when debugging then debugger is not coming into this line even if it finds the thumbprint 
      { 
       cert = store.Certificates[i]; 
      } 
     } 
     return cert; 
} 

また、私はApp.configファイルで同じことをやろうとしているが、私はとエラーを打っている:ここで

invalid hexadecimal string format. inner exception null

は私のApp.configファイル

です
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.serviceModel> 
    <bindings> 
    <customBinding> 
    <binding name="PrivatmoneyPortBinding" > 
     <security defaultAlgorithmSuite="Basic128" authenticationMode="MutualCertificate" 
      requireDerivedKeys="false" includeTimestamp="true" messageProtectionOrder="SignBeforeEncrypt" messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10" 
      requireSignatureConfirmation="false"> 

      <localClientSettings cacheCookies="true" detectReplays="true" 
         replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="00:05:00" 
         replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00" 
         sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true" 
         timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" /> 
        <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00" 
         maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00" 
         negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00" 
         sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00" 
         reconnectTransportOnFailure="true" maxPendingSessions="128" 
         maxCachedCookies="1000" timestampValidityDuration="00:05:00" /> 
     </security> 
       <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
        messageVersion="Default" writeEncoding="utf-8"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       </textMessageEncoding> 
       <httpsTransport manualAddressing="false" maxBufferPoolSize="524288" 
        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
        bypassProxyOnLocal="false" decompressionEnabled="true" 
        keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="true" 
        useDefaultWebProxy="true" requireClientCertificate="true" /> 
    </binding> 
    </customBinding> 
</bindings> 
<client> 
    <endpoint address="https://pmtest.xxxx.xx:xxxx/xxxxx/xxxxx?wsdl" behaviorConfiguration="NewClientEPBehavior" 
     binding="customBinding" bindingConfiguration="PrivatmoneyPortBinding" 
     contract="PrivatMoney.PrivatmoneyPort" name="PrivatmoneyPort"> 
    </endpoint> 
</client> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="NewClientEPBehavior"> 
       <clientCredentials> 
        <serviceCertificate> 
      <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" /> 
        </serviceCertificate> 
        <clientCertificate storeLocation="CurrentUser" storeName="Root" findValue="‎176455DB76886FF2BA3C122F8B36322F647CB2FD" x509FindType="FindByThumbprint" /> 

     </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 
</configuration> 

答えて

1

拇印の仕上がりがわかりません。私の場合は、証明書の詳細(mmcからのGUI)から選択しました。問題はもっと選択したことでした。 冒頭に表示されている一部の非表示文字が、設定に貼り付けると表示されません。

最初の文字以外のサムプリントを選択し、クリップボードにコピーします。 configに最初の文字を入力し、残りをクリップボードから貼り付けます。

+0

答えに感謝します。私はあなたの提案を試みたが、同じエラーがまだあります。なぜこのエラーを投げているのかお聞かせください。証明書の存在をチェックする他の方法はありますか? – user7336033

+0

引用符**を含む拇印**を削除し、手動で入力してください。このメッセージに '無効な16進文字列形式 'がある場合、無効な文字がいくつかあります。 – pepo

+0

ありがとうございました。しかし今は別のエラーが発生する:x 509証明書にプライベートキーが存在しない – user7336033

関連する問題