Ubuntu 14.04のDocker 1.13.1コンテナーでASP.NET Core 1.1 Web APIを実行しています。
コードがHTTPSサーバーからデータを取得しようとすると、次の証明書認証エラーが発生します。
An error occurred while sending the request. ---> System.Net.Http.CurlException: Peer certificate cannot be authenticated with given CA certificates
at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)
at System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper, CURLcode messageResult)
HTTPSサーバーは社内CAによって署名された証明書で内部にあるため、内部CAを登録する必要がある場合があることに注意してください。
このエラーについてこれまでに発見したすべてのことと、Dockerは、Docker自体の実行、リポジトリへの接続などについて話します。私のDockerは正常に動作し、Web APIはコンテナ外のUbuntuサーバーで問題なく実行されます。
1)Dockerイメージ内にCAルート証明書を追加する必要がありますか?
2)その場合、どうすればよいですか?
3)そうでない場合、これを修正するにはどうすればよいですか?
通常のシステムにもそのCAを追加する必要があるため、タスク自体はdockerに固有のものではありません。 askubuntuコミュニティ にこれを行う方法に関する回答があります。
Dockerfile では、次のようにします(root以外のユーザーでコンテナーを実行している場合は、chmodを忘れないでください)。
ADD your_ca_root.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
また、これには間違いなく.crt拡張子を使用する必要があることに注意してください。私は最初に.pem証明書ファイル(これらは互換性があると思ったので、他の人もそうかもしれない)でこれを試しました。これはupdate-ca-certificates
によってリンクされていません。