JVM にパブリック SSL 証明書をインポートする方法

プラットフォームについて: サーバーと Data Center のみ。この記事は、サーバーおよび Data Center プラットフォームのアトラシアン製品にのみ適用されます。

このページの内容はサポート対象外のプラットフォームに関連しています。したがって、アトラシアン サポートではこのページの記載内容のサポートの提供は保証されません。この資料は情報提供のみを目的として提供されています。内容はお客様自身の責任でご利用ください。

問題

HTTPS 経由で 2 つのサーバーを接続する場合、各サーバーのパブリック SSL 証明書がもう片方のサーバーの JVM のトラストストアに追加されている必要があります。


ソリューション

JVM にパブリック SSL 証明書をインポートするには、2 つの方法があります。

Portecle の使用

  1. アプリケーションを実行しているサーバーに Portecle アプリをダウンロードしてインストールします。

    これはサードパーティ製のアプリケーションであり、アトラシアンのサポート対象外です。

  2. <JAVA_HOME> 変数が、アプリケーションが使用している Java と同じバージョンを指していることを確認します。詳細な情報については「JAVA_HOME の設定」ドキュメントをご参照ください。

     Linux / Unix サーバー上で実行している場合は、サーバーへの接続時に次のように X11 を転送することで GUI を利用できます。

    ssh -X user@server
  3. Select the Examine menu and then click Examine SSL/TLS Connection:
  4. ターゲットとなるシステムの SSL ホストとポートを入力します。
  5. 読み込みが完了されるまで待ちます。完了したら、パブリック証明書を選択し、PEM をクリックします。
  6. 証明書をエクスポートし、保存します。
  7. メイン画面に戻り、[Open an existing keystore from disk] オプションを選択し、トラストストア ファイル (例: $JAVA_HOME/lib/security/cacerts) を選択して、パスワードを入力します (既定は changeit)。
  8. Select the Import a trusted certificate into the loaded keystore button:
  9. ステップ 6 で保存した証明書を選択し、適切なエイリアス (例: confluence) を付与して、信頼済みであることを確認します。
    1. 次のようなエラーが表示される可能性があります。 
    2. これが発生した場合、[OK] をクリックして証明書を信頼済みとして許可します。
  10. キーストアをディスクに保存します。
  11. アプリケーションを再起動します。
  12. ホストに接続できることをテストします。

コマンド ラインを使用したインストール

  1. Fetch the certificate, replacing google.com with the FQDN of the server your application is attempting to connect to:

    Method using openssl

    Unix:

    openssl s_client -connect google.com:443 -servername google.com < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

    Windows の場合:

    openssl s_client -connect google.com:443 -servername google.com < NUL | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

    If you are under a redirection domain page, you must specify always -servername <your_domain_name> in order to ensure we are loading the correct domain, otherwise, openssl takes the first SSL cert it receives, when it should be the second cert that belongs to your domain.

    上記のコマンドは、環境に Sed for WindowsOpenSSL がインストールされている場合にのみ実行されます。Sed または OpenSSL をインストールしていないか、インストールする予定がない場合、代替手段として以下の手順を利用できます。次のコマンドを実行します。

    openssl s_client -connect google.com:443 -servername google.com

    出力を public.crt. というファイルに保存します。public.crt ファイルを編集し、BEGIN CERTIFCATEEND CERTIFICATE の間の内容だけを含むようにします。編集後は次のようになります。

    -----BEGIN CERTIFICATE-----
    < Certificate content as fetched by the command line. 
    Don't change this content, only remove what is before 
    and after the BEGIN CERTIFICATE and END CERTIFICATE. 
    That's what your Sed command is doing for you :-) >
    -----END CERTIFICATE-----
    Method using keytool

    keytool for fetching a certificate does not support Server Name Indication (SNI). If you need to specify a server name to get the correct certificate, please use openssl instead.


    Unix:

    $JAVA_HOME/bin/keytool -printcert -sslserver google.com:443 -rfc >> public.crt

    Windows の場合:

    %JAVA_HOME%/bin/keytool -printcert -sslserver google.com:443 -rfc >> public.crt
  2. 証明書をインポートします。

    Java 8:

    <JAVA_HOME>/bin/keytool -importcert -alias <server_name> -keystore <JAVA_HOME>/jre/lib/security/cacerts -file public.crt

    Java 11:

    <JAVA_HOME>/bin/keytool -importcert -alias <server_name> -keystore <JAVA_HOME>/lib/security/cacerts -file public.crt

    必要に応じてパスワードを入力します (既定は changeit)。

  3. Restart your application
  4. ホストに接続できることをテストします。


トラストストアの代替ロケーション

Java will normally use a system-wide truststore:

  • Java 8: $JAVA_HOME/jre/lib/security/cacerts
  • Java 11: $JAVA_HOME/lib/security/cacerts

However it is possible to use a different truststore by specifying a parameter, -Djavax.net.ssl.trustStore=/path/to/truststore, where '/path/to/truststore' is the absolute file path of the alternative truststore. Information on how to configure JIRA startup variables can be found here.

しかしながら、この設定は推奨されていません。これは、Java がカスタム キーストア (自己署名証明書を含む) を使用するように指定された場合、$JAVA_HOME/jre/lib/security/cacerts で見つかった署名認証局のルート証明書へのアクセスを持たず、CA が署名したほとんどの SSL サイトへのアクセスに失敗するためです。前述のように、新しい証明書 (自己署名証明書) をシステムレベルのキーストアに追加することをおすすめします。

デバッグ

次のような問題が発生する場合があります。

  • 証明書が誤ったトラストストアにインストールされている。
  • 接続しようとしている SSL サービスの証明書がキーストアに含まれていない。
説明HTTPS 経由で 2 台のサーバーを接続する場合、それぞれのサーバーのパブリック SSL 証明書がもう片方に読み込まれている必要があります。
製品Jira、Confluence、Bamboo、Bitbucket
Last modified on Mar 23, 2023

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.