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

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

最終更新日:Jul 31, 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 レコード。

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

  1. SSL 証明書管理 ページに移動します。対象の証明書の [操作] 列で、もっと をクリックして証明書の詳細ページに移動します。[ダウンロード] タブで、[サーバータイプ][JKS] に設定して証明書をダウンロードします。

    Java KeyStore (JKS) は、Java 環境独自のキーストアフォーマットです。
  2. パッケージを解凍します。パッケージには、.jks ファイル (完全な証明書チェーンを含む証明書ファイル) と jks-password.txt ファイル (キーストアパスワード) が含まれています。

ステップ 2: システムとネットワーク環境の設定

このステップでは、アプリケーションが指定されたポートでリッスンでき、セキュリティグループとファイアウォールが外部トラフィックを許可するようにします。

セキュリティグループでポート 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

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

PuTTY、Xshell、WinSCP などのファイル転送ツールを使用して、.jks ファイルと jks-password.txt$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.password、および jetty.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 でのインバウンドトラフィックを許可していません。「ステップ 2: システムとネットワーク環境の設定」をご参照ください。

  • ドメインの不一致: アクセスしているドメインが、証明書の[バインドされたドメイン]に含まれていません。ワイルドカードおよび完全一致のカバレッジルールについては、前提条件のセクションをご参照ください。

  • 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

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