2017-12-13 10 views
1

別の(外部の)RESTサービスを使用する内部RESTサービスを実装しました。外部サービスは、クライアント証明書(およびトークン)を使用してHTTPSで保護されます。最初の実装ではクライアント証明書HttpClient .Net Core Docker Linux

は、それは、.NET Framework(もちろん窓の4.6.2)に基づいたサービスだったコードはそのように見えた:

 var certificate = new X509Certificate2("./ExternalCert.pfx", "supersecurepassword764689"); 
     var httpClientHandler = new HttpClientHandler 
     { 
      ClientCertificateOptions = ClientCertificateOption.Manual, 
      ClientCertificates = 
      { 
       certificate 
      }, 
      CookieContainer = this.cookieContainer, 
     }; 
     this.httpClient = new HttpClient(httpClientHandler) 
     { 
      BaseAddress = new Uri(url) 
     }; 

そしてそれは非常によく働きました。今度はASP.NET Core 2(.NET Coreベース)とDockerに切り替えています。私のWindowsマシン上での開発中に上記のコードは.NETコアでも動作しました。

しかし、私はドッカーコンテナ(もちろんLinux)の内部で実行すると、もう動作しません(SSLエラー)。 (今のところ、証明書はコンテナイメージにコピーされますが、ドッカーの秘密と共に保管する予定です)。

私はいくつかの研究を行いました。* .pfxはLinuxで動作しないようで、pfxに基づいて* .pemファイルを生成する必要があります。 だから私は、このコマンドで生成された:私はまだ、外部からのエラーを取得します

var certificate = new X509Certificate2(File.ReadAllBytes("./NewExternalCert.pem"), "supersecurepassword764689"); 

var certificate = new X509Certificate2("./NewExternalCert.pem", "supersecurepassword764689"); 

とも試してみました:

openssl pkcs12 -in ExternalCertificate.pfx -out ExternalCertificate.pem -nodes 

は、その後、私は次の行を置き換えクライアント証明書が失われていても、アプリケーションに例外はありません。

どうしたのですか?どうすればlinuxで証明書を送ることができますか? 両方のOSで同じように実行する可能性はありますか?

アドバイスをいただきありがとうございます。

+0

意図音のようなコードが動作

その後
COPY ExternalCert.pem /etc/ssl/certs/ExternalCert.pem 

/dotnet/corefx/search?q =クライアント+証明書+ httpclienthandler&type = Issues&utf8 =✓あなたがヒットしたものと既に解決策があるかどうかを調べることができます。あなたのものと一致しない場合は新しいものを開きます。 –

+0

ええ、それらの多くを読んでいくつかの "解決策"を試してみました。私はいろいろなことを試すのに多くの時間を費やしましたが、あまりにも明白なものを紛失しているかどうかは分かりません。 – pr177

+0

すばやく、その部分のMicrosoft単体テストケースを掘り下げ、Linuxで動作するかどうかを確認することです。その後、マイクロソフトが既にそれを実装しているかどうかを知ることができます。 –

答えて

1

私はそれを理解しました。 Windowsに証明書をインストールする必要があるので、linux環境を設定する必要があります。

私は容器の画像(Dockerfile)の一部として証明書をコピー:https://github.com、その部分は多くの問題を持っているよう

関連する問題