このトピックでは、Java KeyStore (JKS) または PFX/PKCS#12 形式の SSL 証明書を Tomcat サーバーにインストールする方法について説明します。証明書ファイルのダウンロード、SSL を有効にするための Tomcat 設定の編集、最終的なインストールの検証など、プロセス全体をカバーしています。
ご不明な点がございましたら、アカウントマネージャーにお問い合わせください。
使用上の注意
開始する前に、次の要件を満たしていることを確認してください:
証明書のステータス: SSL 証明書が信頼できる認証局 (CA) によって発行されていること。証明書が まもなく期限切れ または 期限切れ の場合は、まず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 解決: ドメインの DNS レコードが設定され、サーバーのパブリック IP アドレスに解決されること。
手順
ステップ 1: 証明書ファイルの準備
SSL 証明書ページに移動します。ターゲット証明書の 操作 列で、証明書のダウンロード をクリックします。ダウンロード タブで、サーバータイプ が [Tomcat] の証明書をダウンロードします。
ダウンロードした証明書パッケージを解凍します。パッケージには、証明書ファイル (.pfx または .jks) とパスワードファイル (.txt) が含まれています。
説明要件、リソース、およびシステムの互換性に基づいて証明書形式を選択してください。
JKS は Java 固有のキーストア形式です。主に Java 環境での使用に適しています。ツールとスクリプトが JKS をサポートしている場合は、JKS を選択してください。
PFX は、Java やその他のプラットフォームで広くサポートされているユニバーサル形式です。さまざまな技術スタック間や Java 以外のシステムと統合するには、PFX 形式を選択してください。
解凍した証明書ファイル (.pfx または .jks) とパスワードファイル (.txt) をサーバーにアップロードします。これらを
/etc/ssl/certディレクトリなどの安全な外部ディレクトリに保存します。重要キーのセキュリティを確保するため、アップロード後に厳格なファイル権限を設定してください。Tomcat ユーザーのみがファイルを読み取れるように許可します。
PuTTY、XShell、WinSCP などのリモートログインツールのローカルファイルアップロード機能を使用してファイルをアップロードできます。Alibaba Cloud Elastic Compute Service インスタンスを使用している場合、ファイルのアップロード方法の詳細については、「ファイルのアップロードまたはダウンロード」をご参照ください。
ステップ 2: システムとネットワーク環境の構成
セキュリティグループとシステムファイアウォールが HTTPS ポート (443) でのインバウンドトラフィックを許可していることを確認してください。
サーバーターミナルで次のコマンドを実行して、ポート 443 が開いているかどうかを確認します:
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 <現在のサーバーのパブリック IP アドレス>:443の場合、ポート 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 <現在のサーバーのパブリック IP アドレス> port [tcp/https] succeeded!または[<現在のサーバーのパブリック IP アドレス>] 443 (https) openの場合、ポート 443 は開いています。そうでない場合は、セキュリティグループとファイアウォールでポート 443 を開きます。セキュリティグループの設定でポート 443 を開きます。
重要サーバーがクラウドプラットフォームにデプロイされている場合は、そのセキュリティグループが TCP ポート 443 でのインバウンドトラフィックを許可していることを確認してください。そうしないと、サービスにアクセスできなくなります。以下の手順では、Alibaba Cloud Elastic Compute Service (ECS) を例として使用します。他のクラウドプラットフォームについては、公式ドキュメントをご参照ください。
Elastic Compute Service インスタンスページに移動し、ターゲットインスタンス名をクリックしてインスタンス詳細ページに移動します。「セキュリティグループルールの追加」を参照して、[セキュリティグループ] に新しいルールを追加します。[アクション] を [許可]、[プロトコルタイプ] を [カスタム TCP]、[宛先ポート範囲] を [HTTPS(443)]、[承認オブジェクト] を [すべての IPv4 アドレス] に設定します。
ファイアウォールでポート 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、ufw、nftables、またはiptables) に基づいて以下の対応するコマンドを実行して、ポート 443 を開きます: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 ACCEPTシステムの再起動後も iptables ルールが維持されるようにするには、次のコマンドを実行します:
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 のインストールルートディレクトリに移動し、次のコマンドを実行して server.xml ファイルを開きます。
sudo vim ./conf/server.xml以下の例とコメントに基づいて server.xml ファイルを設定します。
重要Tomcat の起動時にエラーを避けるため、コードをコピーする際はコメントを削除してください。
Tomcat で SSL 証明書を構成する手順はバージョン間で似ていますが、サポートされている Java のバージョンや構成構文の違いにより、わずかな差異があります。このセクションでは、Tomcat 7、8.5、および 9 の具体的な手順を説明します。
Tomcat 9
以下の構成プロセスに従って、ポートフォワーディング、証明書ファイル、およびその他の設定を構成します。
HTTP リダイレクトコネクタを構成します。例:
<!-- コネクタポートを 80 に、redirectPort をデフォルトの SSL ポートである 443 に変更して、HTTP リクエストをポート 443 に転送します。 --> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" maxParameterCount="1000" />SSL コネクタを構成します。例:
PFX 形式
<!-- Tomcat のデフォルトの HTTPS ポートを 443 に変更します。ポート 8443 はドメイン名で直接アクセスできません。ドメイン名の後にポート番号を追加する必要があります。 --> <!-- ポート 443 は HTTPS のデフォルトポートであり、ポート番号を追加せずにドメイン名で直接アクセスできます。 --> <!-- コネクタポートには NIO と APR の 2 つの動作モードがあります。NIO モードを選択します。--> <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <!-- /etc/ssl/cert/domain_name.pfx を証明書の実際のパスに置き換えます。証明書のパスワードを pfx-password.txt ファイルの内容に置き換えます。 --> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.pfx" certificateKeystorePassword="証明書パスワード" type="RSA" /> </SSLHostConfig> </Connector>JKS 形式
<!-- Tomcat のデフォルトの HTTPS ポートを 443 に変更します。ポート 8443 はドメイン名で直接アクセスできません。ドメイン名の後にポート番号を追加する必要があります。 --> <!-- ポート 443 は HTTPS のデフォルトポートであり、ポート番号を追加せずにドメイン名で直接アクセスできます。 --> <!-- コネクタポートには NIO と APR の 2 つの動作モードがあります。NIO モードを選択します。--> <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <!-- /etc/ssl/cert/domain_name.jks を証明書の実際のパスに置き換えます。証明書のパスワードを jks-password.txt ファイルの内容に置き換えます。 --> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.jks" certificateKeystorePassword="証明書パスワード" type="RSA" /> </SSLHostConfig> </Connector>設定項目 3:
設定例 ( のコメント記号を削除してください):
<!-- redirectPort を 443 に変更して、HTTPS リクエストをポート 443 に転送します。 --> <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="443" maxParameterCount="1000" />
Tomcat 8.5
SSL 実装を手動で指定します (JSSE 実装を指定します)。
設定例 (
<!--と-->を削除してコメントを解除してください):PFX 形式
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000"> <SSLHostConfig> <!-- /etc/ssl/cert/domain_name.pfx を証明書の実際のパスに置き換えます。証明書のパスワードを pfx-password.txt ファイルの内容に置き換えます。 --> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.pfx" certificateKeystorePassword="証明書パスワード" type="RSA"/> </SSLHostConfig> </Connector>JKS 形式
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000"> <SSLHostConfig> <!-- /etc/ssl/cert/domain_name.jks を証明書の実際のパスに置き換えます。証明書のパスワードを jks-password.txt ファイルの内容に置き換えます。 --> <Certificate certificateKeystoreFile="/etc/ssl/cert/domain_name.jks" certificateKeystorePassword="証明書パスワード" type="RSA"/> </SSLHostConfig> </Connector>Tomcat 7
Tomcat サーバーは SSL 実装を自動的に選択します。この方法で構成を完了できない場合、お使いの環境が自動選択された SSL 実装をサポートしていない可能性があります。
設定例:
PFX 形式
<!-- #必要に応じて port 属性を変更します (デフォルトの HTTPS ポートは 443 です)。別のポート番号を使用する場合は、https://ドメイン名:ポート を使用して Web サイトにアクセスする必要があります。 keystoreFile の値を証明書の実際のパスに置き換えます。 keystorePass の値を pfx-password.txt ファイルの内容に置き換えます。 その他の設定項目については、Tomcat の公式サイトをご覧ください。--> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/etc/ssl/cert/domain_name.pfx" keystoreType="PKCS12" keystorePass="証明書パスワード" 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 形式
<!-- #必要に応じて port 属性を変更します (デフォルトの HTTPS ポートは 443 です)。別のポート番号を使用する場合は、https://ドメイン名:ポート を使用して Web サイトにアクセスする必要があります。 keystoreFile の値を証明書の実際のパスに置き換えます。 keystorePass の値を jks-password.txt ファイルの内容に置き換えます。 その他のフィールドについては、Tomcat の公式サイトをご覧ください。--> <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="証明書パスワード" 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"/>任意:
/conf/web.xmlファイルで、HTTP から HTTPS への自動リダイレクトを設定します。Tomcat のインストールルートディレクトリに移動し、次のコマンドを実行して
web.xmlファイルを開きます。sudo vim ./conf/web.xmlweb.xmlファイルの末尾に次の設定を追加します。<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 のインストールディレクトリの
binディレクトリに移動し、次のコマンドを実行して設定ファイルを検証します。出力がConfiguration file test successfulの場合、検証は成功です。そうでない場合は、テストに合格するまでプロンプトに基づいて設定を修正します。./configtest.shTomcat のインストールディレクトリの
binディレクトリに移動し、次のコマンドを実行して Tomcat を停止および再起動します。停止コマンド:
sudo ./shutdown.sh再起動コマンド:
sudo ./startup.sh
ステップ 4: デプロイメントの検証
Web ブラウザで HTTPS 経由でドメインにアクセスします。例:
https://yourdomain.com。yourdomain.comを実際のドメインに置き換えてください。ブラウザのアドレスバーにロックアイコンが表示されれば、証明書は正常にデプロイされています。アクセスエラーが発生したり、ロックアイコンが表示されない場合は、ブラウザのキャッシュをクリアするか、シークレット (プライバシー) モードで再試行してください。

バージョン 117 以降、Chrome のアドレスバーの
アイコンは新しい
アイコンに置き換えられました。このアイコンをクリックすると、ロック情報を表示できます。
問題が解決しない場合は、トラブルシューティングについて「よくある質問」セクションをご参照ください。
本番環境への移行
本番環境にデプロイする際は、セキュリティ、安定性、および保守性を向上させるために、以下のベストプラクティスに従ってください:
非管理者ユーザーとして実行:
アプリケーション専用の低権限のシステムユーザーを作成します。管理者権限を持つアカウントでアプリケーションを実行しないでください。
説明推奨されるアプローチは、ゲートウェイレイヤーで SSL を構成することです。これには、Server Load Balancer (SLB) や Nginx などのリバースプロキシに証明書をデプロイすることが含まれます。ゲートウェイは HTTPS トラフィックを終端し、復号化された HTTP トラフィックをバックエンドアプリケーションに転送します。
認証情報管理の外部化:
パスワードやその他の機密情報をコードや設定ファイルにハードコーディングしないでください。環境変数、Vault、またはクラウドプロバイダーのキー管理サービスを使用して認証情報を注入します。
HTTP から HTTPS へのリダイレクトの強制:
中間者攻撃を防ぐために、すべての HTTP トラフィックを HTTPS にリダイレクトします。
最新の TLS プロトコルの構成:
サーバー設定で古い安全でないプロトコル (SSLv3、TLSv1.0、TLSv1.1 など) を無効にします。TLSv1.2 と TLSv1.3 のみを有効にします。
証明書の監視と更新の自動化:
証明書をデプロイした後、ドメイン監視を有効にします。Alibaba Cloud は証明書の有効期間を自動的にチェックし、有効期限が切れる前に更新リマインダーを送信して、サービスの中断を回避するのに役立ちます。詳細については、「パブリックドメイン名監視の購入と有効化」をご参照ください。
よくある質問
インストールまたは更新後に証明書が機能しない、または HTTPS にアクセスできないのはなぜですか?
この問題は、多くの場合、以下のいずれかの設定上の問題が原因です。順番に確認してください:
ポート 443 がブロックされている: サーバーのセキュリティグループまたはファイアウォールでポート 443 が開いていません。「システムとネットワーク環境の構成」をご参照ください。
ドメインの不一致: アクセスしているドメインが証明書の ドメイン名のバインド にリストされていません。「ドメイン名の一致」をご参照ください。
Tomcat が再起動されていない: 設定ファイルが変更された後、Tomcat サービスが再起動されていません。手順については、「Tomcat サービスの停止と再起動」をご参照ください。
不正な証明書設定: 証明書ファイルが正しく置き換えられていないか、Tomcat 設定で証明書パスが正しく指定されていません。Tomcat 設定ファイルと証明書ファイルが最新で有効であることを確認してください。
他のサービスでの証明書の欠落: ドメインがコンテンツ配信ネットワーク (CDN)、Server Load Balancer (SLB)、Web Application Firewall (WAF) などのサービスを使用している場合、証明書はそれらのサービスにもインストールする必要があります。セットアップを完了するには、「複数の Alibaba Cloud サービスを通過するトラフィックの証明書デプロイ場所」をご参照ください。
複数のサーバーでの不完全なデプロイ: ドメインの DNS が複数のサーバーに解決される場合、証明書はそれらすべてにインストールする必要があります。
さらなるトラブルシューティングについては、「ブラウザのエラーメッセージに基づく証明書デプロイの問題の解決」および「SSL 証明書デプロイのトラブルシューティングガイド」をご参照ください。
Tomcat で SSL 証明書を更新または置換する正しい方法は何ですか?
古いファイルのバックアップ: サーバー上の既存の証明書ファイル (.pfx または .jks、および .txt ファイル) をバックアップします。
新しいファイルの取得: Certificate Management Service コンソールから新しい証明書と秘密鍵ファイルをダウンロードします。
ファイルの置換: 新しいファイルをサーバーにアップロードし、古いファイルを上書きします。新しいファイルが Tomcat 設定で指定されているものとまったく同じパスとファイル名であることを確認してください。
Tomcat の再起動: Tomcat サービスを再起動して、新しい証明書を適用します。
Tomcat の起動に失敗し、ログに「Keystore was tampered with, or password was incorrect」エラーが表示される
これは一般的な問題です。「Tomcat サーバーに証明書をインストールする」セクションを参照し、以下の手順でトラブルシューティングを行ってください:
server.xmlで設定された証明書パスワードが、キーストアファイル自体のパスワードと同一であることを確認します。末尾のスペースや改行文字がないことを確認してください。certificateKeystoreFile(またはkeystoreFile) のファイルパスが正しいことを確認します。Tomcat ユーザーが証明書ファイルの読み取り権限を持っていることを確認します。
サーバーへのアクセス時に「Connection was reset」または「Connection Refused」エラーが発生する
これは通常、ネットワーク接続の問題です。「システムとネットワーク環境の構成」セクションを参照し、以下の手順でトラブルシューティングを行ってください:
サーバーのセキュリティグループとシステムファイアウォールの両方が、HTTPS ポート (443 または設定された別のポート) でのトラフィックを許可していることを確認します。
Tomcat サービスが実行中であることを確認します。これは
ps -ef | grep tomcatコマンドを使用して確認できます。portで設定されたserver.xmlが、アクセスされているポートと一致することを確認します。