HTTPS を使用した TeamCity サーバーへのアクセス
このドキュメントでは、サーバーとの通信に HTTPS を使用するよう Java アプリケーションを構成する方法について説明します。
自己署名証明書の背後にあるサービス (例: Git) に TeamCity サーバーを接続する必要がある場合、または自己署名証明書を使用して TeamCity エージェントを TeamCity サーバーに接続する必要がある場合は、 信頼できる証明書の構成を使用してください。
TeamCity ウェブサーバーで HTTPS をすでに構成済みであることを前提としています。 TeamCity HTTPS 設定を使用するか、HTTP のみの TeamCity サーバーの Tomcat ポートに HTTPS アクセスを提供する Nginx や Apache などのリバースプロキシサーバーを設定することで実行できます。 セットアップでは、リバースプロキシの構成が プロキシサーバーの背後で TeamCity をセットアップするセクションに従って正解であることを確認してください。
HTTPS 経由でサーバーにアクセス
証明書が有効な場合 (つまり、Verisign のようなよく知られた認証局によって署名されている場合)、TeamCity クライアントは追加の構成なしで HTTPS を使用して動作するはずです。 http:// の代わりに TeamCity サーバーへの https:// リンクを使用するだけです。
証明書が有効でない場合 (自己署名の場合):: (つまり、既知の認証局によって署名されていないため、「PKIX パスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません」というエラーメッセージが表示される)
TeamCity Visual Studio Add-in からの HTTPS 接続を有効化するには、
https://URL を使用して Internet Explorer で TeamCity サーバーを開き、サーバー証明書をブラウザーにインポートします。 その後、Visual Studio アドインは HTTPS で接続できるようになります。Java クライアント (TeamCity エージェント、IntelliJ IDEA など) からの HTTPS 接続を有効化するには、接続するアプリケーションで使用される JVM インストールの構成について、 以下のセクションを参照してください。
JVM の構成
サーバー証明書を信頼するためのクライアント JVM の構成
証明書が有効な場合 (つまり、問題であり、Verisign のような有名な認証局によって署名された)、Java クライアントは追加の構成なしで HTTPS で動作するはずです。 Let's Encrypt が発行した証明書を使用するには、クライアントが使用する JVM を最新のものにアップグレードしてください。
証明書が有効でない場合 (自己署名の場合):
Java クライアントからの HTTPS 接続を有効にするには、サーバー証明書(またはサーバーの証明書が署名されている組織の証明書)を信頼できる証明書として JVM にインストールする必要があります。 これは一般的な Java アプリケーションの手順です (TeamCity 固有ではありません):
サーバー証明書の CA ルート証明書を、 サポートされているフォーマットのいずれかでファイルに保存します (このファイルは以下で <証明書ファイル> と呼ばれます)。 これは、ブラウザーで証明書データをインスペクションし、Base64 でエンコードされた X.509 証明書としてエクスポートすることで実行できます。
プロセスで使用されている JRE を見つけます。 適切な Java インストールへのパスを取得する最善の方法は、実行中のプロセスのコマンドラインを調べることです。 * JDK がインストールされている場合 (IntelliJ IDEA の場合など)、<JRE インストールへのパス> は <使用する JDK へのパス>/jre である必要があります
Windows にインストールされた TeamCity エージェントまたはサーバーの場合、<JRE インストールへのパス> のデフォルトの場所は <TeamCity インストールパス>/jre です
JVM の
keytoolツールを使用して、サーバー証明書をデフォルトの JRE インストールキーストアにインポートします。
デフォルトでは、Java キーストアはパスワード「変更してください 」で保護されており、プロンプトで入力する必要があります。
JVM を再起動します
クライアント証明書による認証のための JVM の構成
TeamCity サーバーの前段にクライアント証明書に基づくカスタム認証を実装している場合は、JVM クライアントが証明書で正しく認証されるようにする必要があります。
クライアント証明書のインポート
クライアント証明書を使用して https 経由でサーバーにアクセスする必要がある場合 (たとえば、IntelliJ IDEA またはビルドエージェントから)、証明書を Java キーストアに追加し、接続プロセスで使用される JVM にキーストアを提供する必要があります。
1\. 証明書が p12 ファイルにある場合、次のコマンドを使用して Java キーストアに変換できます。 JDK 1.6-1.8 の keytool を使用してください: それより前のバージョンでは p12 フォーマットを認識できない場合があります。
これらのコマンドは、.p12 ファイルからエイリアス "1" の証明書を抽出し、Java キーストアに追加します。<.p12 証明書へのパス> と <p12 証明書のパスワード> を把握している必要があり、<キーストアファイルへのパス> と <キーストアパスワード> には新しい値を指定できます。
ここでは、 キーパス は ストアパス と等しい必要があります。JVM には ストアパス のみが提供され、 キーパス が異なる場合、次のエラーが発生する可能性があるためです: "java.security.NoSuchAlgorithmException: 実装の構築エラー (アルゴリズム: Default、プロバイダー: SunJSSE、クラス: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)"。
信頼チェーンを構成するためのルート証明書のインポート
証明書が信頼できる機関によって署名されていない場合は、証明書チェーンのルート証明書を信頼できるキーストアに追加し、この信頼できるキーストアを JVM に提供する必要もあります。
2\. まず、証明書からルート証明書を抽出する必要があります。 証明書がインストールされている場合はウェブブラウザーから実行できます。または、 OpenSSL ツールで次のコマンドを使用して実行できます:
<.p12 証明書へのパス> とそのパスワードを知っておく必要があります(プロンプトが表示されたら入力します)。 確認を求められたら、<.pem フォーマットの証明書へのパス> と pem パスフレーズに新しい値を指定してください。
3\. 次に、ルート証明書 (ルート証明書には同じ発行者フィールドとサブジェクトフィールドが必要です) を pem ファイル (テキスト形式) から別のファイルに抽出する必要があります。 ファイルは次のようになります。
そのお名前が <ルート証明書へのパス> であると仮定します。
4\. 次のコマンドを使用して、ルート証明書を信頼できるキーストアにインポートします。
ここでは、<信頼キーストアのパス> と <信頼キーストアのパスワード> に新しい値を使用できます (または既存の信頼キーストアを使用します)。
接続するアプリケーション JVM の起動
これで、アプリケーションを実行するときに次のパラメーターを JVM に渡す必要があります。
IntelliJ IDEA の場合、 bin\idea.exe.vmoptions ファイルに行を追加できます (1 行につき 1 つのオプション)。 TeamCity ビルドエージェントについては、 エージェント始動プロパティを参照してください。
証明書の課題を分析するための便利なツール
SSLPoke(英語) Java クラス。
openssl-s_ クライアント(英語)。 この例では、証明書チェーン:
openssl s_client -connect <サーバー名>:<ポート> -showcertsを示しています。 これは、カスタム信頼ストアを使用しており、必要な証明書がすべて含まれていることを確認する必要がある場合に役立ちます。