Linux 上で動作する Tomcat サーバーに Java KeyStore (JKS) または PFX/PKCS#12 形式の SSL 証明書をインストールして HTTPS を有効化します。このガイドでは、証明書のダウンロード、Tomcat の server.xml の構成、ポート 443 の開放、およびデプロイメントの検証について説明します。
注意事項
作業を開始する前に、以下の要件を満たしていることを確認してください。
証明書のステータス:信頼された認証局から発行された SSL 証明書を保有している必要があります。証明書の有効期限が近づいている場合や、すでに期限切れになっている場合は、まず SSL 証明書を更新してください。
ドメイン名の一致:証明書が保護したいすべてのドメイン名と一致していることを確認してください。ドメイン名を追加または変更するには、公式証明書の購入またはドメイン名の追加と置き換えを行ってください。
完全一致ドメイン名:指定されたドメインにのみ適用されます。
example.comはexample.comのみを保護します。www.example.comはwww.example.comのみを保護します。
ワイルドカードドメイン名:その第 1 レベルサブドメインにのみ適用されます。
*.example.comはwww.example.comやa.example.comなどの第 1 レベルサブドメインに適用されます。*.example.comはルートドメインexample.comやa.b.example.comなどの複数レベルのサブドメインを保護しません。
説明複数レベルのサブドメインを一致させるには、ドメイン名のバインド フィールドに、
a.b.example.comのような正確なドメイン、または*.b.example.comのような対応するワイルドカードドメインを含める必要があります。サーバー権限:
rootアカウント、またはsudo権限を持つアカウントが必要です。ドメイン名の名前解決:ドメインの DNS レコードが構成され、サーバーのパブリック IP アドレスに解決されている必要があります。
クイックスタート
インストール手順は次の 4 ステップで構成されています。
Certificate Management Service コンソールから証明書パッケージをダウンロードし、ファイルをサーバーにアップロードします。
セキュリティグループとファイアウォールでポート 443 を開放します。
server.xmlを編集して SSL コネクタを追加し、Tomcat を再起動します。ブラウザで
https://yourdomainにアクセスし、ロックアイコンが表示されることを確認します。
前提条件
作業を開始する前に、以下の項目を準備してください。
信頼された認証局 (CA) によって発行された SSL 証明書。証明書の有効期限が近づいている場合や、すでに期限切れになっている場合は、まず更新してください。
保護対象のすべてのドメイン名に一致する証明書:ドメイン名を追加または変更するには、公式証明書を購入する または ドメイン名を追加および置き換え してください。
完全一致ドメイン名:指定されたドメインにのみ適用されます。たとえば、
example.comはexample.comのみを保護し、www.example.comはwww.example.comのみを保護します。ワイルドカードドメイン名:第 1 レベルサブドメインにのみ適用されます。たとえば、
*.example.comはwww.example.comやa.example.comをカバーしますが、ルートドメインexample.comやa.b.example.comなどの複数レベルのサブドメインはカバーしません。
複数レベルのサブドメインを保護するには、バインド済みドメイン フィールドに、正確なサブドメイン(例:
a.b.example.com)または一致するワイルドカードドメイン(例:*.b.example.com)のいずれかを含める必要があります。サーバー上の
rootアカウント、またはsudo権限を持つアカウント。サーバーのパブリック IP アドレスに解決されるよう構成されたドメインの DNS レコード。
ステップ 1:証明書ファイルの準備
SSL 証明書ページに移動します。操作列で対象の証明書の証明書のダウンロードをクリックします。ダウンロードタブで、サーバータイプとしてTomcatを選択し、パッケージをダウンロードします。
ダウンロードしたパッケージを展開します。これには証明書ファイル(
.pfxまたは.jks)とパスワードファイル(.txt)が含まれています。環境に適した証明書形式を選択してください。 - JKS (Java KeyStore):Java 固有のキーストア形式です。既存のツールやスクリプトがすでに JKS をサポートしている場合は、JKS を選択してください。 - PFX/PKCS#12:Java および他のプラットフォームでサポートされる汎用形式です。異なる技術スタック間や非 Java システムとの統合を行う場合は、PFX を選択してください。
証明書ファイル(
.pfxまたは.jks)およびパスワードファイル(.txt)をサーバーにアップロードします。それらを/etc/ssl/cert/などの安全なディレクトリに保存します。PuTTY、Xshell、または WinSCP などのリモートログインツールのファイルアップロード機能を使用して、これらのファイルを転送します。Alibaba Cloud Elastic Compute Service (ECS) インスタンスを使用している場合は、「ファイルのアップロードまたはダウンロード」をご参照ください。重要アップロード後は、証明書ファイルへのアクセスを制限してください。Tomcat ユーザーのみが読み取りできるように設定します。
sudo chown tomcat:tomcat /etc/ssl/cert/domain_name.* sudo chmod 400 /etc/ssl/cert/domain_name.*
ステップ 2:ポート 443 の開放
Tomcat では、クラウドのセキュリティグループと OS のファイアウォールの両方でポート 443 を開放する必要があります。
セキュリティグループでポート 443 を開放する
サーバーが Alibaba Cloud ECS 上で実行されている場合は、TCP ポート 443 を許可するインバウンドルールを追加します。
Elastic Compute Service (ECS) インスタンスに移動し、対象のインスタンス名をクリックします。
セキュリティグループの詳細セクションで、以下の設定でセキュリティグループルールを追加し、保存します。他のクラウドプラットフォームを使用している場合は、各プラットフォームのドキュメントをご参照ください。
フィールド 値 操作 許可 プロトコル カスタム TCP 宛先 (現在のインスタンス) HTTPS (443) ソース 0.0.0.0/0 (任意の場所)
OS のファイアウォールでポート 443 を開放する
まず、ポート 443 がすでに到達可能かどうかを確認します。使用している Linux ディストリビューションに応じて、次のコマンドを実行します。
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# <your_server_public_ip> をご利用のサーバーのパブリック IP アドレスに置き換えてください。
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443出力に Ncat: Connected to <your_server_public_ip>:443 が含まれている場合、ポート 443 はすでに開放されており、これ以上の操作は不要です。
Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
# <your_server_public_ip> をご利用のサーバーのパブリック IP アドレスに置き換えてください。
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <your_server_public_ip> 443出力に Connection to <your_server_public_ip> port [tcp/https] succeeded! または [<your_server_public_ip>] 443 (https) open が含まれている場合、ポート 443 はすでに開放されており、これ以上の操作は不要です。
ポート 443 が開放されていない場合は、アクティブなファイアウォールを特定してポートを開放します。
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
echo "iptables"
else
echo "none"
fi出力が none の場合、アクティブなファイアウォールはありません。それ以外の場合は、ご利用のファイアウォールに対応するコマンドを実行します。
firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null
sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTiptables ルールを再起動後も維持するには、次のようにします。
RHEL/CentOS:
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu:
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
ステップ 3:Tomcat の構成
Tomcat のバージョンによって構文が若干異なります。ご利用のバージョンに該当するセクションに従ってください。
Tomcat 9
Tomcat のルートディレクトリから
server.xmlを開きます。sudo vim ./conf/server.xmlHTTP リダイレクトコネクタを構成します。 既存の HTTP コネクタを更新して、トラフィックをポート 443 にリダイレクトするようにします。
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" maxParameterCount="1000" />SSL コネクタを追加します。 証明書形式に一致するブロックを選択します。
PFX 形式
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.pfx" certificateKeystorePassword="<password-from-pfx-password.txt>" type="RSA" /> </SSLHostConfig> </Connector>JKS 形式
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.jks" certificateKeystorePassword="<password-from-jks-password.txt>" type="RSA" /> </SSLHostConfig> </Connector>certificateKeystoreFileのパスを証明書ファイルの実際のパスに、certificateKeystorePasswordの値を対応するパスワードファイルの内容に置き換えてください。AJP コネクタの redirectPort を 443 に更新します。
<Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="443" maxParameterCount="1000" />
Tomcat 8.5
Tomcat 8.5 では、JSSE 実装を手動で指定する必要があります。コネクタの構文は上記の Tomcat 9 と同じです。Tomcat 9 のセクションにある PFX または JKS のブロックを使用して SSL コネクタを追加してください。
Tomcat 7
Tomcat 7 では、Connector 要素にインラインで SSL 属性を指定し、ネストされた SSLHostConfig は使用しません。
PFX 形式
<Connector port="443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/etc/ssl/cert/domain_name.pfx"
keystoreType="PKCS12"
keystorePass="<password-from-pfx-password.txt>"
clientAuth="false"
SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>JKS 形式
<Connector port="443"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectport="8443"
maxParameterCount="1000"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/etc/ssl/cert/domain_name.jks"
keystoreType="JKS"
keystorePass="<password-from-jks-password.txt>"
clientAuth="false"
SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>(オプション)HTTP から HTTPS への強制リダイレクト
すべての HTTP リクエストを自動的に HTTPS にリダイレクトするには、conf/web.xml の末尾、終了タグ </web-app> の直前に次のブロックを追加します。
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>構成の検証と Tomcat の再起動
構成を検証します。 Tomcat の
binディレクトリから、次のコマンドを実行します。./configtest.sh出力が
Configuration file test successfulの場合、構成は有効です。エラーが表示された場合は、エラーメッセージに基づいて構成を修正し、再度検証を実行してください。変更を適用するために Tomcat を再起動します。
sudo ./shutdown.sh sudo ./startup.sh
ステップ 4:デプロイメントの検証
ブラウザを開き、https://yourdomain(yourdomain を実際のドメインに置き換えてください)にアクセスします。
アドレスバーにロックアイコンが表示されれば、証明書が正しくインストールされています。

Chrome バージョン 117 以降では、
アイコンが新しい
アイコンに置き換えられました。このアイコンをクリックすると、証明書の詳細を確認できます。
ロックアイコンが表示されない場合やアクセスエラーが発生する場合は、ブラウザのキャッシュをクリアするか、シークレットモードで再度試してください。問題が解決しない場合は、よくある質問セクションをご参照ください。
本番環境に適用
本番環境にデプロイする際は、以下のベストプラクティスを適用してください。
root ユーザー以外で Tomcat を実行します。 Tomcat 専用の低権限システムアカウントを作成し、root として実行しないでください。
代わりに、ゲートウェイライヤーで SSL を終端することを検討してください。つまり、Server Load Balancer (SLB) や Nginx などのリバースプロキシに証明書をデプロイします。ゲートウェイが HTTPS の終端処理を行い、バックエンドにはプレーン HTTP を転送することで、複数サーバー間での証明書管理が簡素化されます。
構成ファイルに認証情報を含めないでください。
server.xmlにパスワードをハードコードするのではなく、環境変数、シークレットマネージャー、またはクラウドのキー管理サービスを使用して、ランタイム時にキーストアパスワードを注入してください。HTTP から HTTPS へのリダイレクトを強制します。 中間者攻撃を防ぐために、すべての HTTP トラフィックを HTTPS にリダイレクトしてください(ステップ 3 のオプションステップを参照)。
レガシー TLS プロトコルを無効化します。 Tomcat の構成で SSLv3、TLS 1.0、TLS 1.1 を無効にして、TLS 1.2 および TLS 1.3 のみを有効にしてください。
証明書の有効期限の監視。デプロイメント後、Certificate Management Service でドメイン監視を有効化します。Alibaba Cloud が証明書の有効性を確認し、有効期限が切れる前に更新のリマインダーを送信します。詳細については、「パブリックドメイン名の監視の購入と有効化」をご参照ください。
よくある質問
インストール後または証明書更新後に HTTPS にアクセスできない
次の項目を順に確認してください。
ポート 443 がブロックされています。 セキュリティグループと OS のファイアウォールの両方がポート 443 でのインバウンド TCP トラフィックを許可していることを確認してください。ステップ 2をご参照ください。
ドメイン不一致。 アクセスしているドメインが証明書のバインド済みドメインフィールドに記載されていることを確認してください。ドメイン一致のルールについては「前提条件」セクションをご参照ください。
Tomcat が再起動されていません。 新しい構成は Tomcat の再起動後にのみ有効になります。ステップ 3の検証および再起動手順をご参照ください。
証明書のパスまたはファイルが正しくありません。
server.xml内のcertificateKeystoreFile(またはkeystoreFile)が、最新かつ正しい証明書ファイルを指していることを確認してください。上流サービスに証明書がありません。 ドメインがコンテンツデリバリーネットワーク (CDN)、Server Load Balancer (SLB)、または Web Application Firewall (WAF) を経由する場合、これらのサービスにも証明書をインストールする必要があります。詳細については、「トラフィックが複数の Alibaba Cloud サービスを経由する場合の証明書デプロイメント場所」をご参照ください。
複数サーバーへのデプロイメントが不完全です。 ドメインの DNS が複数のサーバーに解決される場合、すべてのサーバーに証明書をインストールする必要があります。
詳細なトラブルシューティングについては、「ブラウザのエラーメッセージに基づく証明書のデプロイメントに関する問題の解決」および「SSL 証明書のデプロイメントに関するトラブルシューティングガイド」をご参照ください。
Tomcat の起動に失敗し、ログに「Keystore was tampered with, or password was incorrect」というエラーが表示される
これはほぼ確実に、server.xml に記載されたパスワードがキーストアファイルと一致していないことを意味します。これを修正するには、次の手順を実行してください。
証明書パッケージ内のパスワードファイル(
.txt)を開き、末尾のスペースや改行を含めずに、内容を正確にコピーします。server.xmlのcertificateKeystorePassword(またはkeystorePass)属性を、その値で更新します。certificateKeystoreFile(またはkeystoreFile)が正しいファイルパスを指していることを確認します。Tomcat ユーザーが証明書ファイルを読み取る権限を持っていることを確認します。
サーバーにアクセスすると「接続がリセットされました」または「接続を拒否されました」と表示される
これは証明書の問題ではなく、ネットワーク接続の問題です。次の項目を確認してください。
セキュリティグループと OS のファイアウォールの両方がポート 443(または
server.xmlで構成されたポート)でのインバウンドトラフィックを許可していることを確認してください。ステップ 2をご参照ください。Tomcat が実行中であることを確認します:
ps -ef | grep tomcatserver.xmlの SSL コネクタ内のport属性が、アクセスしているポートと一致していることを確認します。
Tomcat での SSL 証明書の更新または置き換え方法
既存のファイルをバックアップします。 サーバー上の現在の証明書ファイル(
.pfxまたは.jks)およびパスワードファイル(.txt)のコピーを保存します。新しい証明書をダウンロードします。 Certificate Management Service コンソールから新しい証明書パッケージを取得します。
ファイルを置き換えます。 新しい証明書ファイルおよびパスワードファイルをサーバー上の同じパスにアップロードし、古いファイルを上書きします。ファイルパスおよびファイル名は、
server.xmlで構成されているものと完全に一致している必要があります。Tomcat を再起動します。 Tomcat の
binディレクトリから、sudo ./shutdown.shおよびsudo ./startup.shを実行して、新しい証明書を適用します。