TeamCity 2020.1ヘルプ

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:要求されたターゲットへの有効な証明書パスが見つかりません」というエラーメッセージが表示される)

  • TeamCity、Visual Studioアドイン、およびWindowsトレイ通知機能からのHTTPS接続を有効にするには、https:// URLを使用してInternet ExplorerからTeamCityサーバーにアクセスし、サーバー証明書をブラウザにインポートします。その後、Visual Studio AddinとWindows Tray NotifierはHTTPSで接続できるはずです。

  • Javaクライアント(TeamCityエージェント、IntelliJ IDEA、Eclipseなど)からのHTTPS接続を有効にするには、接続アプリケーションで使用されるJVMインストールの設定について以下のセクションを参照してください。

JVMの設定

サーバー証明書を信頼するためのクライアントJVMの構成

証明書が有効な場合(つまり、課題であり、Verisignのような有名な認証局によって署名された)、Javaクライアントは追加の構成なしでHTTPSで動作するはずです。Let's Encryptが発行した証明書を使用するには、クライアントが使用するJVMを最新のものにアップグレードしてください。

証明書が有効でない(自己署名されている)場合:

JavaクライアントからのHTTPS接続を有効にするには、サーバー証明書(またはサーバーの証明書が署名されている組織の証明書)を信頼できる証明書としてJVMにインストールする必要があります。以下は、一般的なJavaアプリケーションの手順です(TeamCity固有ではありません):

  • サーバーの証明書のCAルート証明書を、サポートされている形式のいずれかでファイルに保存します (ファイルは以下で<cert file>と呼ばれます)。これは、証明書データをインスペクションし、それを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ビルドエージェントの場合は、エージェント起動プロパティを参照してください。

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

最終更新日: 2020年7月23日