SSL証明書
Shared HostingアカウントにグローバルSSL証明書をアップロードしてHTTPSを有効にする方法と、形式の変換や更新について説明します。
このガイドでは、Shared HostingにSSL証明書を配置し、サイトをHTTPSで配信する方法を説明します。
仕組み
Shared Hostingでは、グローバルSSL証明書を使用します。各ホスティングアカウントに証明書を1つ設定でき、アップロードすると、そのアカウントに紐づくすべてのドメインに適用されます。そのため、HTTPSで配信するすべてのドメインを証明書でカバーする必要があります。次のいずれかを使用できます。
- サブジェクト代替名(SAN)にすべてのドメインを記載したマルチドメイン証明書です。たとえば、
example.comとwww.example.comの両方を含めます。 *.example.comなどのワイルドカード証明書です。ワイルドカードはルートドメインのexample.comをカバーしないため、SANに別途含めてください。
執筆時点では、Shared HostingのすべてのプランがSSL証明書に対応しています。
証明書ファイルを準備する
PEM形式のテキストが2つ必要です。
| 項目 | 形式 |
|---|---|
| SSL 証明書 | -----BEGIN CERTIFICATE-----で始まり、-----END CERTIFICATE-----で終わります |
| 秘密鍵 | -----BEGIN PRIVATE KEY-----または-----BEGIN RSA PRIVATE KEY-----で始まり、パスフレーズで保護されていない必要があります |
認証局からは通常、サイト証明書と1つ以上の中間証明書が提供されます。サイト証明書を先頭に貼り付け、その後に各中間証明書を続けて、完全な証明書チェーンを作成してください。そうしないと、一部のブラウザーやクライアントで証明書が信頼されていないと報告されることがあります。
一般的な形式を変換する
フォームでは、-----BEGIN EC PRIVATE KEY-----で始まる秘密鍵(ECC証明書でよく使用されます)や、パスフレーズで保護された秘密鍵は受け付けられません。まずOpenSSLで暗号化されていないPKCS#8に変換してください。
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.key.pfxまたは.p12ファイルがある場合は、次のように分割します。
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out original.key
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.key
cat cert.pem chain.pem > fullchain.pemアップロード前に確認する
サーバーは、証明書と秘密鍵が一致するか確認します。事前に自分で確認することもできます。
# Show the domains and expiry date in the certificate
openssl x509 -in fullchain.pem -noout -subject -enddate -ext subjectAltName
# If these two commands print the same hash, the certificate and key match
openssl x509 -in fullchain.pem -noout -pubkey | openssl sha256
openssl pkey -in private.key -pubout | openssl sha256証明書を配置する
- 共有ホスティング一覧で、対象のホスティングアカウントの管理をクリックします。
- SSL 証明書タブに切り替え、SSL 証明書をアップロードをクリックします。
- SSL 証明書に完全な証明書チェーンを、秘密鍵に秘密鍵を貼り付けます。
- アップロードをクリックします。「SSL 証明書をアップロードしました」と表示されれば、証明書の配置は完了です。
エラーが発生する場合、よくある原因は次のとおりです。
| メッセージ | 原因と対処方法 |
|---|---|
| 有効なPEM形式の証明書 / 秘密鍵を入力してください | テキストにBEGIN/END行がないか、鍵の種類がサポートされていません。上記の手順で変換してください |
| 証明書 / 秘密鍵が無効です | テキストの一部が欠けているか、余分な文字が含まれています。内容全体をもう一度コピーしてください |
| 証明書と秘密鍵が一致しません | この証明書に対応する秘密鍵ではありません |
| 当前套餐不支持部署SSL(プランがSSLの配置に対応していません) | ご利用のプランにSSLが含まれていません |
HTTPSを確認する
証明書を配置したら、ブラウザーでhttps://your-domainを開き、アドレスバーに安全な接続が表示されることを確認してください。コマンドラインから、サーバーが返す証明書を確認することもできます。
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -enddate執筆時点では、アップロードに成功しても、SSL 証明書タブに「SSL 証明書未デプロイ」と表示される場合があります。成功メッセージと実際のHTTPSリクエストの結果で判断してください。
HTTPSにリダイレクトする
証明書を配置すると、サイトはHTTPとHTTPSの両方を受け付けます。訪問者が常にHTTPSを使用するようにするには、アプリケーションにリダイレクトを追加してください。PHPサイトの場合は、エントリーファイルの先頭に次のコードを追加します。
<?php
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['SERVER_PORT']) && (int)$_SERVER['SERVER_PORT'] === 443);
if (!$isHttps) {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
exit;
}リダイレクトを追加する前に、HTTPSが動作することを確認してください。WordPressなどのアプリケーションでは、管理画面のサイトアドレスもhttps://で始まるものに変更する必要があります。
更新
Shared Hostingの証明書は自動更新されません。有効期限が切れる前に認証局から新しい証明書を取得し、SSL 証明書タブで再度アップロードしてください。新しい証明書が古い証明書を置き換えます。有効期限の少なくとも2週間前までの置き換えを目安にしてください。
APIで配置する
次は、コンソールが使用するエンドポイントです。{name}はホスティングアカウント名です。リクエストにはログイントークンを含めてください。
jq -n --rawfile cert fullchain.pem --rawfile key private.key \
'{certificate: $cert, certificate_key: $key}' \
| curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
https://api.yeap.cloud/api/user/host_shared/vhosts/name/{name}/ssl-full -d @-jqでリクエストボディを作成すると、PEMテキスト内の改行をそのまま保持できます。