TeamCity 2020.2 ヘルプ

HTTPS を使用して TeamCity サーバーにアクセスする

このドキュメントでは、サーバーとの通信に HTTPS を使用するように Java アプリケーションを構成する方法について説明します。

TeamCityWeb サーバーで既に HTTPS を設定していると仮定します。このための最も一般的で推奨されるアプローチは、HTTP 専用 TeamCity サーバーの Tomcat ポートに HTTPS アクセスを提供する Nginx や Apache のようなリバースプロキシサーバーをセットアップすることです。セットアップで、リバースプロキシがプロキシサーバーの背後に TeamCity をセットアップするセクションに従って正しい設定を持っていることを確認してください。

HTTPS 経由でサーバーにアクセスする

証明書が有効な場合(つまり、Verisign のようなよく知られた認証局によって署名された)、TeamCity クライアントは追加の設定なしで HTTPS で動作するはずです。 http:// の代わりに TeamCity サーバーへの https:// リンクを使用するだけです。

証明書が無効な場合 (自己署名している) : (つまり、既知の認証局によって署名されていないため、「PKIX パスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません」というエラーメッセージが表示される)

  • To enable HTTPS connections from the TeamCity Visual Studio アドイン and Windows トレイ通知機能 , point your Internet Explorer to the TeamCity server using https:// URL and import the server certificate into the browser. After that, the Visual Studio Addin and Windows Tray Notifier should be able to connect by HTTPS.

  • Java クライアント(TeamCity エージェント、IntelliJ IDEA、Eclipse など)からの 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 インストールキーストアにインポートします。

keytool -importcert -file <cert file> -keystore <path to JRE installation>/lib/security/cacerts

デフォルトでは、Java キーストアはパスワード「changeit」で保護されており、プロンプトで入力する必要があります。

  • JVM を再起動します

クライアント証明書を使用した認証用の JVM の構成

TeamCity サーバーの前にクライアント証明書に基づくカスタム認証を実装した場合は、JVM クライアントがそれらの証明書で正しく認証されるようにする必要があります。

クライアント証明書のインポート

クライアント証明書を使用して https 経由でサーバーにアクセスする必要がある場合(たとえば、IntelliJ IDEA、Eclipse、またはビルドエージェントから)、証明書を Java キーストアに追加し、接続で使用される JVM にキーストアを提供する必要があります。プロセス。

1. p12 ファイルに証明書がある場合、次のコマンドを使用して証明書を Java キーストアに変換できます。JDK 1.6-1.8 の keytool を使用していることを確認してください。以前のバージョンは p12 形式を認識しない場合があります。

keytool -importkeystore -srckeystore <path to your .p12 certificate> -srcstoretype PKCS12 -srcstorepass <password of your p12 certificate> -destkeystore <path to keystore file>  -deststorepass <keystore password> -destkeypass <keystore password> -srcalias 1

このコマンドは、.p12 ファイルからエイリアス "1" の証明書を抽出し、それを Java キーストアに追加します。<.p12 証明書へのパス> および <p12 証明書のパスワード> を知っておく必要があります。キーストアファイル> および <キーストアパスワード> に移動します。

ここでは、storepass のみが JVM に提供されているため、keypassstorepass と等しくなければなりません。keypass が異なると、次のエラーが発生する可能性があります。"java.security.NoSuchAlgorithmException:実装の構築エラー(アルゴリズム:デフォルト、プロバイダー:SunJSSE、クラス: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl) "#:。

信頼のチェーンを編成するためのルート証明書のインポート

証明書が信頼できる機関によって署名されていない場合は、証明書チェーンのルート証明書を信頼できるキーストアに追加し、この信頼できるキーストアを JVM に提供する必要もあります。

2. まず、証明書からルート証明書を抽出する必要があります。証明書がインストールされている場合は Web ブラウザーからこれを行うことができます。または、コマンドを使用して OpenSSL(英語) ツールでこれを行うことができます。

openssl.exe pkcs12 -in <path to your .p12 certificate> -out <path to your certificate in .pem format>

<path to your .p12 certificate> とそのパスワードを知っておく必要があります(プロンプトが表示されたら入力します)。プロンプトが表示されたら、<証明書へのパス(.pem 形式)> および pem パスフレーズに新しい値を指定する必要があります。

3. 次に、pem ファイル(テキスト形式)から別のファイルにルート証明書(ルート証明書の発行者フィールドとサブジェクトフィールドが同じである必要があります)を抽出する必要があります。ファイルは次のようになります。

-----BEGIN CERTIFICATE----- MIIGUjCCBDqgAwIBAgIEAKmKxzANBgkqhkiG9w0BAQQFADBwMRUwEwYDVQQDEwxK ... -----END CERTIFICATE-----

その名前が <ルート証明書へのパス> であるとしましょう。

4. 次のコマンドを使用して、ルート証明書を信頼できるキーストアにインポートします。

keytool -importcert -trustcacerts -file <path to root certificate> -keystore <path to trust keystore file> -storepass <trust keystore password>

ここで、<trust keystore path> および <trust keystore password> に新しい値を使用できます(または既存の信頼キーストアを使用します)。

接続アプリケーション JVM の起動

これで、アプリケーションを実行するときに次のパラメーターを JVM に渡す必要があります。

-Djavax.net.ssl.keyStore=<path to keystore file> -Djavax.net.ssl.keyStorePassword=<keystore password> -Djavax.net.ssl.trustStore=<path to trust keystore file> -Djavax.net.ssl.trustStorePassword=<trust keystore password>

IntelliJ IDEA の場合、bin\idea.exe.vmoptions ファイルに行を追加できます(1 行に 1 つのオプション)。TeamCity ビルドエージェントの場合は、エージェント起動プロパティを参照してください。

証明書の課題を分析するのに役立つツール