すべてのプロダクト
Search
ドキュメントセンター

Certificate Management Service:Jetty サーバーへの SSL 証明書のインストール (Linux)

最終更新日:Apr 01, 2026

デフォルトでは、Jetty は HTTP 経由でデータを送信するため、盗聴やセッションハイジャックなどのリスクにサービスがさらされます。SSL 証明書をインストールすると HTTPS が有効になり、クライアントとサーバー間のトラフィックが暗号化され、サーバーの ID が検証されます。

重要

このガイドでは、Linux と jetty-distribution-9.4.51.v20230217 をサンプル環境として使用します。手順は、ご利用のオペレーティングシステムや Jetty のバージョンによって異なる場合があります。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • 信頼できる認証局によって発行された SSL 証明書。証明書の有効期限が近づいている、または切れている場合は、まず更新してください。

  • 保護したいすべてのドメイン名をカバーする証明書です。ドメイン名を追加または変更するには、公式証明書を購入するか、バインドされたドメインを更新します

    複数レベルのサブドメインをカバーするには、[バインドされたドメイン] フィールドに完全一致のドメイン (例:a.b.example.com) または一致するワイルドカード (例:*.b.example.com) を含める必要があります。
    ドメインタイプカバー範囲
    完全一致 (example.com)指定されたドメインのみ
    ワイルドカード (*.example.com)第 1 レベルのサブドメインのみ (www.example.coma.example.com)。ルートドメイン example.com や、a.b.example.com のような複数レベルのサブドメインはカバーしません。
  • サーバー上の root アカウントまたは sudo 権限を持つアカウント。

  • ドメイン名の名前解決:ドメインの DNS レコードが設定され、サーバーのパブリック IP アドレスに解決されること。

  • ドメインをサーバーのパブリック IP アドレスに解決する DNS レコード。

概要

インストールは 5 つのステップで構成されます。

ステップタスク
1Alibaba Cloud コンソールから JKS 証明書をダウンロードする
2セキュリティグループとサーバーのファイアウォールでポート 443 を開く
3証明書を使用して Jetty SSL モジュールを設定する
4Jetty を再起動する
5HTTPS が機能していることを確認する

ステップ 1:SSL 証明書のダウンロード

  1. SSL 証明書管理ページに移動します。対象の証明書の [操作] 列で、[証明書のダウンロード] をクリックします。

  2. [ダウンロード] タブで、[サーバーの種類] として [JKS] を選択し、証明書パッケージをダウンロードします。

    Java KeyStore (JKS) は、Java 環境独自のキーストア形式です。
  3. パッケージを解凍します。パッケージには 2 つのファイルが含まれています。

    • .jks ファイル — 完全な証明書チェーンを含む証明書ファイル。

    • jks-password.txt ファイル — キーストアパスワード。

ステップ 2:ポート 443 の開放

HTTPS トラフィックはポート 443 を使用します。クラウドのセキュリティグループとサーバーのファイアウォールの両方でこのポートを開いてください。

セキュリティグループでポート 443 を開く

サーバーが Alibaba Cloud Elastic Compute Service (ECS) で実行されている場合は、セキュリティグループにインバウンドルールを追加します。

  1. Elastic Compute Service (ECS) インスタンスページに移動し、対象のインスタンス名をクリックします。

  2. [セキュリティグループの詳細] セクションで、以下の設定でルールを追加して保存します。詳細については、「セキュリティグループルールを追加する」をご参照ください。

    フィールド
    アクション許可
    プロトコルカスタム TCP
    宛先 (現在のインスタンス)HTTPS (443)
    ソース0.0.0.0/0 (任意)

他のクラウドプラットフォームについては、それぞれのドキュメントをご参照ください。

ポート 443 がすでに開いているかどうかの確認

次のコマンドを実行して、ポート 443 が到達可能であることを確認します。<your_server_public_ip> をサーバーのパブリック IP アドレスに置き換えてください。

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 --reload

ufw

sudo ufw allow 443/tcp

nftables

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/null

iptables

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

再起動後も iptables のルールを永続化させるには:

RHEL/CentOS
sudo yum install -y iptables-services
sudo service iptables save
Debian/Ubuntu
sudo apt-get install -y iptables-persistent
sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null

ステップ 3:Jetty への SSL 証明書のインストール

ディレクトリ構造のセットアップ

Jetty はインストールディレクトリ ($JETTY_HOME) と作業ディレクトリ ($JETTY_BASE) を分離します。将来のアップグレードを簡素化するために、これらを分離したままにしてください。

# 例:Jetty は /usr/local/jetty にインストールされ、アプリケーションは /var/www/my-app から実行されます。
export JETTY_HOME=/usr/local/jetty
export JETTY_BASE=/var/www/my-app

# 証明書ファイルと Web アプリケーションリソース用のディレクトリを作成します。
mkdir -p $JETTY_BASE/cert
mkdir -p $JETTY_BASE/webapps

cd $JETTY_BASE

証明書ファイルのアップロード

.jks」ファイルと「jks-password.txt」ファイルを、PuTTY、Xshell、または WinSCP などのファイル転送ツールを使用して、$JETTY_BASE/cert/ ディレクトリにアップロードします。サーバーが Alibaba Cloud ECS 上にある場合は、「ファイルのアップロードまたはダウンロード」を参照してください。

SSL モジュールの有効化

$JETTY_BASE ディレクトリで、次のコマンドを実行して ssl モジュールを初期化します。これにより、ssl.inihttps.ini$JETTY_BASE/start.d/ に生成されます。

java -jar $JETTY_HOME/start.jar --add-to-start=ssl

証明書パスとパスワードの設定

$JETTY_BASE/start.d/ssl.ini を編集用に開きます。

vim $JETTY_BASE/start.d/ssl.ini

以下のパラメーターを見つけて更新します。いずれも # でコメントアウトされていないことを確認してください。

jetty.ssl.keyStorePath=cert/your_domain.jks
jetty.ssl.keyStorePassword=<jks-password.txt のパスワード>
jetty.ssl.keyManagerPassword=<jks-password.txt のパスワード>
パラメーター説明
jetty.ssl.keyStorePath$JETTY_BASE から .jks ファイルへの相対パスcert/your_domain.jks
jetty.ssl.keyStorePasswordjks-password.txt
jetty.ssl.keyManagerPasswordAlibaba Cloud JKS 証明書の場合、keyStorePassword と同じ値
古いパラメーター名 jetty.ssl.keystore.pathjetty.ssl.keystore.passwordjetty.ssl.keymanager.password は非推奨です。上記に示されているキャメルケースの名前を使用してください。

ステップ 4:Jetty の再起動

$JETTY_BASE ディレクトリから、sudo を使用して Jetty サーバーを起動します。ポート 443 は特権ポートであり、root 権限が必要です。

# Jetty の作業ディレクトリに移動します。
cd $JETTY_BASE

# サービスを開始します。
sudo java -jar $JETTY_HOME/start.jar

ステップ 5:インストールの確認

  1. ブラウザを開き、https://yourdomain にアクセスします。yourdomain を実際のドメインに置き換えてください。

  2. アドレスバーの鍵アイコンは、証明書が正しくインストールされていることを示します。アクセスエラーが表示されるか、鍵アイコンが表示されない場合は、ブラウザのキャッシュをクリアするか、シークレットモードで再試行してください。

image

Chrome 117 以降、image の鍵アイコンは image に置き換えられました。このアイコンをクリックすると、証明書の詳細が表示されます。

image.png
Error 404 の応答は、Jetty が正常に起動したものの、デプロイされた Web アプリケーションがないことを意味します。これは新規インストールでは想定内の動作です。

本番環境への適用

本番環境に移行する際は、セキュリティと安定性を向上させるために、以下のプラクティスを適用してください。

  • 非 root ユーザーとして実行:アプリケーション専用の低権限のシステムアカウントを作成します。Jetty を root として実行しないでください。

    推奨されるアプローチは、ゲートウェイ層で SSL を終端させることです。つまり、Server Load Balancer (SLB) や Nginx などのリバースプロキシに証明書をデプロイします。ゲートウェイが HTTPS を処理し、復号化された HTTP トラフィックを Jetty に転送します。
  • 認証情報の外部化:設定ファイルにパスワードや機密情報をハードコーディングしないでください。環境変数、シークレットマネージャー、またはクラウドのキー管理サービスを使用して、実行時に認証情報を注入します。

  • HTTP から HTTPS へのリダイレクトの強制:すべての中間者攻撃を防ぐために、すべての HTTP トラフィックを HTTPS にリダイレクトします。

  • レガシー TLS プロトコルの無効化:サーバー設定で、SSLv3、TLS 1.0、および TLS 1.1 を無効にします。TLS 1.2 と TLS 1.3 のみを有効にしてください。

  • 証明書のモニタリングと更新の自動化: デプロイメント後、ドメインモニタリングを有効化します。Alibaba Cloud は証明書の有効性を確認し、有効期限が切れる前に更新のリマインダーを送信するため、サービス中断が発生する前に対応できます。詳細については、「パブリックドメイン名モニタリングの購入および有効化」をご参照ください。

よくある質問

インストール後に HTTPS が機能しない

以下の項目を順に確認してください。

  • ポート 443 がブロックされている:セキュリティグループまたはファイアウォールがポート 443 でのインバウンドトラフィックを許可していません。「ポート 443 の開放」をご参照ください。

  • ドメインの不一致:アクセスしているドメインが証明書の [バインドされたドメイン] にリストされていません。ワイルドカードと完全一致のカバー範囲ルールについては、「前提条件」セクションをご参照ください。

  • Jetty が再起動されていない:設定の変更は再起動後にのみ有効になります。「Jetty の再起動」をご参照ください。

  • 証明書パスまたはパスワードが間違っている:jetty.ssl.keyStorePath が正しい .jks ファイルを指していること、および ssl.ini のパスワードが jks-password.txt と一致していることを確認してください。

  • アップストリームサービスに証明書がありません:ドメインでコンテンツデリバリーネットワーク (CDN)、Server Load Balancer (SLB)、または Web Application Firewall (WAF) を使用している場合は、これらのサービスにも証明書をインストールしてください。 詳細については、「トラフィックが複数の Alibaba Cloud サービスを通過する場合の証明書のデプロイ先」をご参照ください。

  • 複数のサーバー:DNS が複数のサーバーに解決される場合は、すべてのサーバーに証明書をインストールしてください。

さらにトラブルシューティングを行う場合は、「ブラウザのエラーメッセージに基づく証明書のデプロイメントに関する問題の解決」および「SSL 証明書のデプロイメントに関するトラブルシューティングガイド」をご参照ください。

Jetty で SSL 証明書を置き換えるにはどうすればよいですか?

  1. 古いファイルのバックアップ:サーバーから既存の .jks および jks-password.txt ファイルを保存します。

  2. 新しいファイルの取得:Certificate Management Service コンソールから新しい証明書をダウンロードします。

  3. ファイルの置き換え:ssl.ini で指定された同じパスに新しいファイルをアップロードし、古いファイルを上書きします。

  4. Jetty の再起動:サービスを再起動して、新しい証明書を適用します。

起動の失敗:「Address already in use」または「Port is already occupied」

ポート 443 はすでに別のプロセスによってバインドされています。sudo ss -tlnp | grep :443 または sudo lsof -i:443 を実行してプロセスを特定し、停止してください。一般的な原因には、Nginx、Apache、またはシャットダウンされなかったテストリスナーなどがあります。

起動の失敗:「Permission denied」

Linux では、1024 未満のポートにバインドするには root 権限が必要です。sudo を使用して Jetty を起動してください。本番環境では、サービスを直接 root として実行することは避け、setcap を使用して Java バイナリに特権ポートへのバインド能力を付与します。

sudo setcap 'cap_net_bind_service=+ep' /path/to/your/java

または、Jetty を Nginx などのリバースプロキシの背後に配置し、ポート 443 でリッスンしてトラフィックを非特権ポートに転送します。