SSL または HTTPS 上で Confluence を実行する
アトラシアンの製品には HTTPS 経由でアクセスできますが、アトラシアン サポートはこの設定についての支援は行いません。したがって、アトラシアンでは、この設定についてのサポートは保証されません。
- SSL証明書の変更に際してサポートが必要であれば、証明書の提供元のベンダーに相談してください。
- 設定でサポートが必要な場合、アトラシアン コミュニティに質問を登録してください。
このページでは、Confluence を設定して HTTPS アクセスを有効する方法の基本的な概要を示します。これにより、Confluence へのログインや Confluence とのデータの送受信時にデータを暗号化できます。これは、Confluence データやユーザーログインが外部から傍受されたり読まれたりするのを防ぐ優れた方法です。
この記事では、トラフィックの暗号化に使用するプロトコルを示す一般的な用語として "SSL" を使用します。ほとんどの場合、プロトコルは TLS になります。
On this page:
これらの手順では、Confluence に付属するアプリケーション サーバーである Tomcat での SSL のターミネートについて説明します。
Web サーバーまたはプロキシで SSL をターミネートしたい場合は、「mod_proxy を使用した Apache」または「SSL を使用して NGINX のバックグラウンドで Confluence を実行する」で、外部 Web サーバーでの SSL 接続のターミネート方法を確認してください。
本ガイドのいくつかの手順では、JDK が必要となります。JRE だけでは手順を完了することができません。
HTTPS を使用せずに Confluence を実行すると、サイトが脆弱な状態になり、中間者攻撃やDNS リバインディング攻撃などに晒される可能性があります。サイトでは HTTPS を有効化することをお勧めします。
ステップ 1. SSL 証明書を作成またはリクエストする
HTTPS を有効にするには、有効な SSL 証明書が必要になります。既に証明書がある場合は、ステップ 2 にスキップしてください。
独自の自己署名証明書を作成するか、信頼できる認証局から証明書を取得することができます。
チームが Confluence Server モバイル アプリを使用ことを計画している場合、信頼できる認証局が発行した証明書が必要となります。自己署名証明書や、信頼されない認証局またはプライベート認証局が発行した証明書でアプリを使用することはできません。
オプション 1: 自己署名証明書を作成する
暗号化が必要だが web サイトのリクエスト元を確認する必要がない場合、自己署名証明書が役立ちます。一般に、自己署名証明書はテスト環境や社内ネットワーク (イントラネット) で使用します。
認証局 (CA) が証明書への署名を行っていないため、ユーザーはサイトが信頼されていない旨のメッセージを受け取り、サイトにアクセスする前に、証明書を承認するためのいくつかのステップを実行する必要がある場合があります。これは通常、サイトに初めてアクセスする際にのみ発生します。自己署名証明書を使用している場合、ユーザーは Confluence Server モバイル アプリ経由でサイトにログインすることはできません。
この例では、JDK に含まれる、Java の keytool
ユーティリティを使用します。コマンドライン ユーティリティの使用に馴染みが薄い場合、コマンドラインではなくキーストア エクスプローラーを使用できます。
keytool
を使用して自己署名証明書を生成するには、次の手順を実行します。
コマンドラインから、お使いのオペレーティング システムに適したコマンドを実行します。
Windows"%JAVA_HOME%\bin\keytool" -genkeypair -keysize 2048 -alias tomcat -keyalg RSA -sigalg SHA256withRSA
Linux (および MacOS)$JAVA_HOME/bin/keytool -genkeypair -keysize 2048 -alias tomcat -keyalg RSA -sigalg SHA256withRSA
プロンプトが表示されたら、証明書 (秘密キー) のパスワードを作成します。
- 英数字のみを使用します。Tomcat には、特殊文字に関する既知の問題があります。
- 次のステップで必要になるので、パスワードを記録しておきます。
既定のパスワードは "
changeit
" です。
- プロンプトに従って、証明書の詳細を指定します。この情報は、エンティティの X.500 識別名 (DN) を構成するのに使用されます。
- 名字と名前: あなたの名前ではなく、"confluence.example.com" などのコモン ネーム (CN) です。CN は Confluence を実行しているサーバーの完全修飾ホスト名と一致している必要があります。そうでない場合、Tomcat は SSL の証明書を使用できません。
- 組織単位: 証明書をリクエストするチームまたは部門です ("マーケティング" など)。
- 組織: 会社名です ("SeeSpaceEZ" など)。
市町村、都道府県、国コード: 所在地です。例: Sydney, NSW, AU。
出力は次の例のようになります。「
y
」を入力して、詳細を確定します。CN=confluence.example.com, OU=Marketing, O=SeeSpaceEZ, L=Sydney, ST=NSW, C=AU
- "tomcat" のパスワードを要求されたら、ステップ 2 で作成したパスワードを入力します (または return を押して同じものを使用します)。
- "tomcat" は、上記の keytool コマンドで入力したエイリアスです。
- キーストア エントリのパスワードは、秘密鍵のものと同じにする必要があります。これは Tomcat の要件です。
- 証明書の準備ができました。以下のステップ2に移動します。
オプション 2: 認証局が発行した証明書を使用する (推奨)
本番環境には、認証局 (CA) が発行した証明書が必要となります。これらの手順は Tomcat のドキュメントのものです。
まず、ローカル証明書を作成し、その証明書に基づいて「証明書署名要求」(CSR)を作成します。CSR を選択した認証局に提出します。CA は証明書を生成するために、その CSR を使用します。
- Java の
keytool
ユーティリティを使用してローカル証明書を生成します (上記のオプション 1 の手順に従います)。 コマンド ラインで、次のコマンドを実行して証明書署名リクエストを生成します。
keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore <MY_KEYSTORE_FILENAME>
<MY_KEYSTORE_FILENAME>
を、ローカル証明書用に生成した.keystore
ファイルのパスおよびファイル名に置き換えます。- 生成された
certreq.csr
ファイルを選択した認証局に登録します。
この方法については対象の CA のドキュメントをご確認ください。 - CA が証明書を送信します。
新しい証明書をローカルのキーストアにインポートします。
keytool -importcert -alias tomcat -keystore <MY_KEYSTORE_FILENAME> -file <MY_CERTIFICATE_FILENAME>
一部の CA では、証明書をインポートする前に、中間証明書をインストールする必要があることに注意してください。証明書を正しくインストールするには CA のドキュメントに従う必要があります。
Verisign または GoDaddy を使用してエラーが発生した場合、秘密鍵とともに証明書を PKCS12 フォーマットへエクスポートする必要があります。
まず、上の手順で追加した証明書をキーストアから削除します。
keytool -delete -alias tomcat -keystore <MY_KEYSTORE_FILENAME>
PKCS12 フォーマットへエクスポートします。
openssl pkcs12 -export -in <MY_CERTIFICATE_NAME> -inkey <MY_PRIVATEKEY_NAME> -out <MY_PKC12_KEYSTORE_NAME> -name tomcat -CAfile <MY_ROOTCERTIFICATE_NAME-alsoCalledBundleCertificateInGoDaddy> -caname root
PKCS12 から jks へインポートします。
keytool -importkeystore -deststorepass <MY_DESTINATIONSTORE_PASSWORD> -destkeypass <MY_DESTINATIONKEY_PASSWORD> -destkeystore <MY_KEYSTORE_FILENAME> -srckeystore <MY_PKC12_KEYSTORE_NAME> -srcstoretype PKCS12 -srcstorepass <MY_PKC12_KEYSTORE_PASSWORD> -alias tomcat
ステップ 2. Confluence の server.xmlファイルの変更
次の手順では、HTTPS を使用して Confluence を設定します。
- <
install-directory>/conf/server.xml
を編集します。 以下の行をコメント アウトします。
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" protocol="org.apache.coyote.http11.Http11Nio2Protocol" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"/>
- <
MY_CERTIFICATE_PASSWORD>
を、証明書に対して指定したパスワードに置き換えます。 - 上記のように、属性 - 値ペア
SSLEnabled="true"
がConnector
要素の一部であることを確認します。この属性が存在しない場合、Confluence へのアクセス試行がタイム アウトします。 maxThreads
の値を、データベース コネクション プールのサイズの 10 スレッド (または 25 %) 未満の値に変更します。通常、約 48 が妥当です。詳細については、「HTTP MaxThreads の設定」を参照してください。- サーバー設定ファイルを保存します。
http
コネクタを削除またはコメント アウトしないでください。これは、Synchrony プロキシのヘルス チェックでは HTTP が引き続き必要であるためです。http
コネクタを含めたくない場合、synchrony.proxy.healthcheck.disabled
システム プロパティを使用してヘルス チェックを無効化することができます。
また、内部 Synchrony プロキシは無効にしないでください ( synchrony.proxy.enabled
システム プロパティを false
に設定する)。これにより、Tomcat で SSL を終了する際に問題が発生することがあります。
Confluence に対するデフォルト コネクタ ポートは8090です。
TLS 1.2 を使用することを推奨します。Confluence モバイル アプリには最小限 TLS 1.2 が必要であり、現在、TLS 1.3 で Confluence を実行する上でいくつか既知の課題が存在するためです。
ステップ 3.証明書の場所を指定する
Tomcat はデフォルトで、キーストア ファイルの名前が .keystore
であることと、およびそのファイルが Tomcat を実行されているユーザーのホーム ディレクトリ (自身のホーム ディレクトリとは異なる可能性があります) にあることを想定しています。つまり、Tomcat はデフォルトでは以下の場所で SSL 証明書を探します。
- Windows:
C:\users\#CURRENT_USER#\.keystore
- OS X および UNIX ベースのシステムの場合:
~/.keystore
Confluence を更新する際にディレクトリのコンテンツが削除されるため、キーストア ファイルを Confluence インストール ディレクトリに保存しないでください。
証明書をユーザー定義の場所に移動することができます。証明書をデフォルトの場所から移動させる場合、以下で説明するように、Tomcat が証明書を見つけることができるようにサーバー設定ファイルを更新する必要があります。
<confluence-install-directory>/conf/server.xml
を編集します。keystoreFile="<MY_CERTIFICATE_LOCATION>"
属性をConnector
要素に追加し、要素が次のようになるようにします。<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" protocol="org.apache.coyote.http11.Http11Nio2Protocol" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>" keystoreFile="<MY_CERTIFICATE_LOCATION>"/>
- テキスト
<MY_CERTIFICATE_LOCATION>
を、.keystore
ファイルの名前とパスを含む、証明書へのパスで置き換えます。 - 設定ファイルを保存します。
ステップ 4.Confluence のベース URL を HTTPS に変更する
- ブラウザで、 > [一般設定] に移動します。
- 編集をクリックします。
- サーバーのベース URL を HTTPS に変更します。「サーバーのベース URL の設定」のドキュメントを参照します。
- Confluence を再起動して
https://<MY_BASE_URL>:8443/
で Confluence にアクセスします。
ステップ 5.すべての URL を HTTPS にリダイレクトするため、セキュリティ制約を追加します。
HTTPS はアクティブ化されていて利用可能ですが、古い URL (http://localhost:8090) も引き続き使用可能です。URL を対応する HTTPS にリダイレクトする必要があります。これを行うには、web.xml
にセキュリティ制約を追加します。これにより、Tomcat は SSL 以外のポートへのリクエストをリダイレクトするようになります。
- Confluence サイトが RSS マクロを使用しているかどうかを確認します。サイトで RSS マクロが有効化されている場合、
web.xml
ファイルを編集するのではなく、ファイアウォール ルールで URL リダイレクトを設定する必要がある場合があります。以下のステップはスキップし、「RSS フィード マクロ」ページの手順に従ってください。 - または、
<CONFLUENCE_INSTALLATION>/confluence/WEB-INF/web.xml
でファイルを編集します。 以下の宣言を、ファイルの末尾の
</web-app>
タグの前に追加します。<security-constraint> <web-resource-collection> <web-resource-name>Restricted URLs</web-resource-name> <url-pattern>/</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
- Confluence を再起動し、http://localhost:8090 にアクセスします。https://localhost:8443/login.action にリダイレクトされます。
Confluence には 2 つの web.xml ファイルがあります。もう片方は <CONFLUENCE_INSTALLATION>/conf/web.xml
にあります。上述のように、セキュリティ成約は <CONFLUENCE_INSTALLATION>/confluence/WEB-INF/web.xml
にのみ追加してください。
注意
- 証明書の生成の背景情報: "
keytool -genkeypair
" コマンドは、公開鍵と関連付けられた秘密鍵のキー ペアを生成し、それらをキーストアに保存します。コマンドは公開鍵を X.509 v3 自己署名証明書にパッケージ化し、単一要素の証明書チェーンとして保存します。この証明書チェーンと秘密鍵は新しいキーストア エントリに保存され、コマンドで指定したalias
で識別されます。Java 11 のドキュメントに、このユーティリティの概要が記載されています。
- カスタム SSL ポート: SSL コネクタが実行されているポートを既定値の 8443 から変更した場合、新しい SSL ポートを反映するには、標準 HTTP コネクタの
redirectPort
属性を更新する必要があります。Tomcat は、受信リクエストの安全性を確保する必要がある場合のリダイレクト先のポートを確認するために、この情報を必要とします。 同一ホストでの複数のインスタンス: 同一ホストで複数のインスタンスを実行する場合は、address 属性を
<CONFLUENCE_INSTALLATION>/conf/server.xml
ファイルで指定することが重要です。これは、コネクタは既定では利用可能なすべてのネットワーク インターフェイス上でリッスンしているので、アドレスを指定することで、同一の既定ポート上で実行されるコネクタ間の衝突を防止するためです。address 属性の設定の詳細については、「Tomcat コネクタのドキュメント」を参照してください。<Connector port="8443" address="your.confluence.url.com" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" protocol="org.apache.coyote.http11.Http11Nio2Protocol" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>" keystoreFile="<MY_CERTIFICATE_LOCATION>"/>
- HTTPS はサイト全体で設定する必要があります。個別のページやスペース用に有効化することはできません。
- Confluence をアップグレードする前に、
server.xml
およびweb.xml
ファイルに加えた変更を記録しておきます。既存のファイルをコピーするのではなく、アップグレード後に変更を手動で再適用することをおすすめします。 - TLS 1.2 が推奨されます。Confluence Server モバイル アプリには TLS 1.2 が必要です。TLS 1.3 と Confluence を実行したり、TLS1.3 を使用して他のアプリケーションに接続したりする上での既知の課題も存在します。Jira と Confluence を併用する場合、TLS 1.2 を使用するように両方のアプリケーションを設定するように推奨します。
トラブルシューティング
- 「SSL のトラブルシューティング」の Confluence ナレッジベース記事を確認してください。
- Apache Tomcat 9.0 ドキュメントの SSL 設定のハウツー
- キーツール - Java 11 ドキュメントの鍵と証明書の管理ツール