この Topic では、単一ドメイン、複数ドメイン、またはワイルドカード証明書を Apache サーバーにインストールする方法について説明します。証明書ファイルのダウンロードとアップロード、証明書パラメーターの設定、インストールの検証方法について説明します。
ご不明な点がある場合は、アカウントマネージャーにお問い合わせください。
使用上の注意
開始する前に、次の要件を満たしていることを確認してください。
証明書のステータス: 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 証明書管理 ページに移動します。対象の証明書の 操作 列で、証明書のダウンロード をクリックします。ダウンロード タブで、サーバータイプ が Apache の証明書をダウンロードします。
ダウンロードした証明書パッケージを解凍します。
証明書ファイル (<bound_domain_name>_public.crt)、証明書チェーンファイル (<bound_domain_name>_chain.crt)、および秘密鍵ファイル (<bound_domain_name>.key) がある場合は、将来のデプロイメントで必要になるため、安全な場所に保管してください。
パッケージに証明書ファイル (<bound_domain_name>_public.crt) と証明書チェーンファイル (<bound_domain_name>_chain.crt) のみが含まれ、秘密鍵ファイル (<bound_domain_name>.key) が含まれていない場合は、ローカルに保存した秘密鍵ファイルとともにデプロイする必要があります。
説明証明書の申請時に OpenSSL や Keytool などのツールを使用して証明書署名リクエスト (CSR) ファイルを生成した場合、秘密鍵ファイルはローカルにのみ保存されます。ダウンロードした証明書パッケージには秘密鍵は含まれません。秘密鍵を紛失した場合、証明書は使用できなくなります。再度公式証明書を購入し、新しい CSR と秘密鍵を生成する必要があります。
解凍した証明書ファイル、証明書チェーンファイル、および秘密鍵ファイルをサーバーにアップロードし、
/etc/ssl/certなどの安全な外部ディレクトリに保存します。説明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 <The public IP address of the current server>: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 <public IP address of the current server> port [tcp/https] succeeded!または[<public IP address of the current server>] 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: Apache サーバーに証明書をインストールする
SSL モジュールが有効になっていることを確認します。
次のコマンドを実行して、
mod_ssl.soモジュールが正常にインストールされているかどうかを確認します。RHEL/CentOS
httpd -M | grep 'ssl_module'Debian/Ubuntu
apachectl -M | grep 'ssl_module'モジュールがインストールされ、ロードされている場合、次のような出力が表示されます。これは、ssl_module が共有モジュールであることを示します。
ssl_module (shared)モジュールがインストールされていない場合は、お使いの Linux ディストリビューションに適したコマンドを実行して mod_ssl.so モジュールをインストールし、SSL 機能を有効にします。
RHEL/CentOS
sudo yum install -y mod_ssl # 新しいバージョン (8.0+) の場合: sudo dnf install -y mod_sslDebian/Ubuntu
# SSL モジュールを有効にします (通常はプリインストール済み) sudo a2enmod ssl
次のコマンドを実行して、Apache のバージョンを確認します。
RHEL/CentOS
httpd -vDebian/Ubuntu
apache2 -vApache のバージョンに基づいて、設定ファイルを変更します。
Apache 2.4.8 以降 (推奨)
証明書ファイルの結合
次のコマンドを実行して、解凍した証明書ファイル (
domain_name_public.crt) と証明書チェーンファイル (domain_name_chain.crt) を 1 つのファイルに結合します。# 証明書チェーンファイルの内容をサーバー証明書ファイルに追加して、完全な証明書チェーンファイルを作成します。 cat domain_name_public.crt domain_name_chain.crt > domain_name_fullchain.pem結合後、
domain_name_fullchain.pemとdomain_name.keyの 2 つのファイルができます。設定ファイルの変更
SSL 仮想ホスト設定ファイルを編集します。
説明設定ファイルは通常、
/etc/httpd/conf.d/ssl.confまたは/etc/apache2/sites-available/your-site-ssl.confにあります。vim /etc/httpd/conf.d/ssl.confSSL 関連のパラメーターを見つけて、証明書の設定を変更します。
<VirtualHost *:443> # example.com を保護したいドメイン名に置き換えます。 ServerName example.com # 証明書ファイル。結合された証明書ファイルへのパスを使用します。 SSLCertificateFile /etc/ssl/cert/domain_name_fullchain.pem # 秘密鍵ファイル。実際の秘密鍵ファイルへのパスに置き換えます。 SSLCertificateKeyFile /etc/ssl/cert/domain_name.key # その他の設定 # ... </VirtualHost>
Apache 2.4.7 以前
証明書ファイルの準備
証明書ディレクトリに、証明書ファイル (
domain_name_public.crt)、証明書チェーンファイル (domain_name_chain.crt)、秘密鍵ファイル (domain_name.key) の 3 つのファイルが含まれていることを確認してください。設定ファイルの変更
SSL 仮想ホスト設定ファイルを編集します。
説明設定ファイルは通常、
/etc/httpd/conf.d/ssl.confまたは/etc/apache2/sites-available/your-site-ssl.confにあります。vim /etc/httpd/conf.d/ssl.confSSL 関連のパラメーターを見つけて、証明書の設定を変更します。
<VirtualHost *:443> # example.com を証明書にバインドされているドメイン名に置き換えます。 ServerName example.com # 証明書ファイル。証明書ファイルへのパスに置き換えます。 SSLCertificateFile /etc/ssl/cert/domain_name_public.crt # 証明書チェーンファイル (別途指定)。証明書チェーンファイルへのパスに置き換えます。 SSLCertificateChainFile /etc/ssl/cert/domain_name_chain.crt # 秘密鍵ファイル。秘密鍵ファイルへのパスに置き換えます。 SSLCertificateKeyFile /etc/ssl/cert/domain_name.key # その他の設定 # ... </VirtualHost>
設定ファイルの構文が正しいかどうかを確認します。出力が
Syntax OKであれば、構文は正しく、続行できます。RHEL/CentOS
sudo httpd -tDebian/Ubuntu
sudo apache2ctl -tApache サービスを再読み込みまたは再起動します。
RHEL/CentOS
# reload を使用します (グレースフルリロード、推奨)。 sudo systemctl reload httpd # restart を使用します (強制再起動)。 sudo systemctl restart httpdDebian/Ubuntu
# reload を使用します (グレースフルリロード、推奨)。 sudo systemctl reload apache2 # restart を使用します (強制再起動)。 sudo systemctl restart apache2
ステップ 4: インストールの検証
Web ブラウザーで HTTPS 経由でドメインにアクセスします。例:
https://yourdomain.com。yourdomain.comを実際のドメインに置き換えてください。ブラウザーのアドレスバーにロックアイコンが表示されれば、証明書は正常にデプロイされています。アクセスエラーが発生した場合やロックアイコンが表示されない場合は、ブラウザーのキャッシュをクリアするか、シークレット (プライバシー) モードで再試行してください。

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