2012-11-16 28 views
9

C#.netアプリケーションがHTTPS Webサービスを使用しています。証明書の有効期限が近づいているので、私は新しい証明書(javasdksのkeytoolを使って.p12に変換した.jksファイル)で更新しようとしています。私はこれを行う方法を知っているので、これは簡単だと思っていましたが、それだけでは協力しません。SSL Webservice:SSL/TLSセキュアチャネルを作成できませんでした

  • インポートされた証明書
  • CURRENT_USER \個人的にインポートされた証明書をLOCAL_MACHINE \個人
  • に正しいユーザー(apppoolidentityに)証明書を経由しての秘密鍵へのアクセスを考える:私はこれまで何をやったか

    winhttpcertcfgツール。以下は、証明書の権利 のリストです。

  • findprivatekeyツールを使用して、私は実際のキーファイルを見つけて、それにアクセスできるようにしました。 (絶望的に)。

    C:\プログラムファイル(x86の)\ Windowsリソースキット\ツール> winhttpcertcfg -l -c LOCAL_MACHINE \マイ-s "9000 - Blabla" のMicrosoft(R)WinHTTPの証明書構成ツール 著作権(C)マイクロソフトコーポレーション2001

    一致する証明書: CN = 9000 - Blabla C = NO L = "C/Blabla AS、Blablaaddress O" OU = 957839827 OID.1.2.240.111111.1.9.8 = 12345678 OID。 1.2.240.111111.1.9.2 = Blablaテスト O = BlaBla AS OU =マルチ許容

    秘密鍵へのアクセス権を持つの

    追加のアカウントとグループが含まれます: BUILTIN \管理者 NT AUTHORITY \ SYSTEM IIS APPPOOL \ ASP.NET v4.0の BUILTIN \ユーザ NT AUTHORITY \ NETWORKサービス DIGITROLLDMZ \ IIS_WPG

私はルックスにこのような何かにアクセスしていますURL:私は、サーバのWebブラウザからアクセスした場合、私は、...

https://test.blabla.com/blabla-5.0/services/Blabla?wsdl 

を証明書を選択するために取得、私は新しいものを選択して、それはすべてのために、緑とSSL、大丈夫だと言いますが、私のアプリケーションコードは、それは次のようになります。

:のみ、このエラーが出力さ

public static blabla.service.NettforhandlerService getNettforhandlerService(string applicationPath) 
    { 
    blabla.service.NettforhandlerService service = new blabla.service.NettforhandlerService(); 
    if (System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"] != null && System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"].Length > 0) 
    { 
     string serviceurl = service.Url; 
     X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
     store.Open(OpenFlags.ReadOnly); 
     X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySerialNumber, System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"], true); 

     ServicePointManager.Expect100Continue = true; 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
     ServicePointManager.CertificatePolicy = new TrustHBSCertificatePolicy(); 

     service.ClientCertificates.Add(col[0]); 

    } 
    return service; 
    } 

The request was aborted: Could not create SSL/TLS secure channel. 

...私は、web.configファイルにいくつかのトレース/デバッグ情報を追加した、と私はエラーから分かったことは、このでしました:私は、これは正しいユーザ/アイデンティティhasnようになります知っている

[Public Key] 
    Algorithm: RSA 
    Length: 2048 
    Key Blob: 30 82 01 0a 02 82 01 01 00 8e a6 72 c2 e1 67 16 e2 be be c3 30 89 8d bb 57 0b 48 f8 1d 09 b1 e3 26 42 c9 45 9e 02 b2 43 49 16 81 94 1b 18 d6 6d ef .... 
System.Net Information: 0 : [15624] SecureChannel#32061089 - Certificate is of type X509Certificate2 and contains the private key. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net Information: 0 : [15624] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc  = System.Net.SecureCredential) 
System.Net Error: 0 : [15624] AcquireCredentialsHandle() failed with error 0X8009030D. 
System.Net.Sockets Verbose: 0 : [15624] Socket#38259205::Dispose() 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071:: - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Error: 0 : [15624] Exception in the HttpWebRequest#54558071::GetResponse - The request was aborted: Could not create SSL/TLS secure channel. 
System.Net Verbose: 0 : [15624] 

ACを与えられていない(winhttpcertcfgの)証明書に行き詰まりますが、私はそれが原因だと確信していますので、ここで迷っています。

https-certificate/web-service-スキルのある人が私を助けてくれることを願っています。ここから:-)

ありがとうございます。

よろしく、 ヨルゲンE.

EDIT1:より正確なものに変更タイトル。 EDIT2:新情報:多くのログから抽出することができない

In EventViewer/Windows Logs/Security there is an event "Audit Failure" connected to this: 

Cryptographic operation. 

Subject: 
    Security ID:  IIS APPPOOL\ASP.NET v4.0 
    Account Name:  ASP.NET v4.0 
    Account Domain:  IIS APPPOOL 
    Logon ID:  0x32498 

Cryptographic Parameters: 
    Provider Name: Microsoft Software Key Storage Provider 
    Algorithm Name: Not Available. 
    Key Name: {00E1A3F5-7400-41CA-8290-02983473AEAF} 
    Key Type: Machine key. 

Cryptographic Operation: 
    Operation: Open Key. 
    Return Code: 0x80090010 

答えて

3

問題解決には、中間証明書は、MMCに中間証明書にインポートし、行方不明になったようだ、とすべてが良い:-)

12

、しかし...

グーグル-FUは、次の結果が得られます。0x80090010は、最も可能性の高い証明書のアクセスエラーです。

これから、高い確率で、SSL証明書の秘密鍵のアクセス許可を設定する必要があると結論づけます。これにより、IISはアクセスできるようになります。 を参照してください: http://www.dotnetnoob.com/2011/01/how-to-give-iis-access-to-private-keys.html

別のオプションと同様の質問:The request was aborted: Could not create SSL/TLS secure channel

+3

こんにちはでした、そして :-)応答に感謝..アイブ氏は現在、このフォルダ内のファイル位置: C:\はProgramData \マイクロソフト\暗号化\ RSA \いるMachineKeys を...ファイル名はa23e3996925c33fec814f8ce35e4b1d9_57324829-0d1c-4ae4-ae60-1e2849f7749a です ... applicationpoolidentityのREADアクセス権をこのファイルに追加すると、動作します!! ..しかし、私は適切な手段(winhttpcertcfg)を介してアクセスを追加することができます:-(.. これを特定する方法を知っている人は誰ですか? または、おそらくこのアクセスを手動で追加するだけで十分です? –

+1

MicrosoftのFindPrivateKey.exeツールを使用するか、キーを削除して、存在するファイルのリストを書き留め、新しいファイルが作成されたことを証明するために証明書/キー(PFXの場合)を再インポートします。 Ref:http://msdn.microsoft.com/ru-ru/library/ms732026.aspx(FindPrivateKey) – DarkWanderer

+0

FindPrivateKeyとあなたが指定したテクニックは、私が達成したいと思っているものの逆です:-)私はマシンキーのファイル名を知っています-fileであり、このファイルがどの証明書に添付されているかを知りたいのですが、私が使用している証明書ではないため、findprivatekeyで使用している証明書を特定しました。 –

関連する問題