商業的な証明書機関からSSL証明書をインストールする方法
はじめに
このチュートリアルでは、信頼できる商用認証局(CA)からSSL証明書を取得し、インストールする方法を説明します。SSL証明書は、ウェブサーバーの通信を暗号化するだけでなく、サーバーの正当性を訪問者に検証する仕組みも提供します。SSLを使用しているウェブサイトは、https://プロトコルを介してアクセスされます。
2010年代半ば以前、多くの小規模なウェブサイトは常にSSLやHTTPSを使用していませんでした。それ以降、セキュリティの要求は高まり、Let’s Encryptプロジェクトが大規模で信頼性のある無料のSSL証明書を提供することで、ほぼ全員が必要に応じてHTTPSを使用できるようになりました。
ただし、Let’s Encryptの証明書にはいくつかの制限があります。それらは3ヶ月ごとに期限切れになり、通常は自動更新スクリプトの設置が必要です。また、自動更新ができない環境では使用が困難です。Let’s Encryptは、ウェブプレゼンスの法的所有権を検証するExtended Validation証明書や、ウェブサイトのすべてのサブドメイン(例:shop.example.com)と自動的に一致するワイルドカード証明書を提供しません。各サブドメインを手動で登録する必要があります。
ほとんどのユーザーにとって、これらは大きな制限ではありません。Let’s Encryptは、多くの個人や商業のウェブサイトで人気のあるオプションです。しかし、特定の企業のソフトウェア要件や非常に大規模な商業オペレーションをお持ちの場合は、商業的な認証局から証明書を購入することを検討すべきです。
信頼できる証明書発行機関からSSL証明書を選択して展開する方法について、このチュートリアルでは取り上げます。SSL証明書を入手した後は、このチュートリアルではNginxおよびApache Webサーバーにインストールする方法も説明します。
前提条件
商用のCAからSSL証明書を取得しようとするためには、いくつかの前提条件があります。 (Shōyō no CA kara SSL shōmeisho o shutoku shiyō to suru tame ni wa, ikutsu ka no zentei jōken ga arimasu.)
- A registered domain name. This tutorial will use example.com throughout. You can purchase a domain name from Namecheap, get one for free with Freenom, or use the domain registrar of your choice.
- Access to one of the email addresses on your domain’s WHOIS record or to an “admin type” email address at the domain itself. Certificate authorities that issue SSL certificates will typically validate domain control by sending a validation email to one of the addresses on the domain’s WHOIS record, or to a generic admin email address at the domain itself. To be issued an Extended Validation certificate, you will also be required to provide the CA with paperwork to establish the legal identity of the website’s owner, among other things.
- DNS records set up for your server. If you are using Silicon Cloud, please see our DNS documentation for details on how to add them.
このチュートリアルでは、Ubuntu 22.04のサーバーの設定方法についての構成手順を提供します。この初期サーバー設定のUbuntu 22.04チュートリアルに従って、sudoが有効な非ルートユーザーとファイアウォールを含めたセットアップ方法を説明します。ほとんどの最新のLinuxディストリビューションでも同様に機能します。
あなたはまた、Ubuntu 22.04にNginxやApacheのようなウェブサーバーをインストールする必要があります。具体的には、How To Install Nginx on Ubuntu 22.04 または How To Install the Apache Web Server on Ubuntu 22.04 の手順に従ってください。さらに、あなたのドメインに対してサーバーブロック(またはApacheの仮想ホスト)が存在することを確認してください。
ステップ1:証明書発行機関の選択
証明書発行機関がどれを使うべきか迷っている場合、考慮すべきいくつかの要素があります。
ルート証明書プログラムの会員資格
最も重要なポイントは、選んだCAが最も一般的に使用されているオペレーティングシステムやウェブブラウザのルート証明書プログラムのメンバーであることです。すなわち、それは「信頼された」CAであり、そのルート証明書が一般的なブラウザや他のソフトウェアによって信頼されていることです。ウェブサイトのSSL証明書が信頼されたCAによって署名されている場合、そのアイデンティティはCAを信頼するソフトウェアによって有効とみなされます。
あなたが出会うであろうほとんどの商用CAは、一般的なルートCAプログラムのメンバーであるでしょうが、証明書を購入する前に確認しておくことは損ではありません。例えば、Appleは信頼されたSSLルート証明書のリストを公開しています。
証明書の種類 (Shōmei-sho no shurui)
必要な証明書タイプを提供しているCAを選択するようにしてください。多くのCAは、これらの証明書タイプのバリエーションをさまざまな名前や価格体系で提供しています。以下に各タイプの短い説明を示します。
- Single Domain: Used for a single domain, e.g. example.com. Note that additional subdomains, such as www.example.com, are not included
- Wildcard: Used for a domain and any of its subdomains. For example, a wildcard certificate for *.example.com can also be used for www.example.com and store.example.com
- Multiple Domain: Known as a SAN or UC certificate, these can be used with multiple domains and subdomains that are added to the Subject Alternative Name field. For example, a single multi-domain certificate could be used with example.com, www.example.com, and example.net
上記の証明書の種類に加えて、CAが提供するさまざまな検証レベルがあります。
- Domain Validation (DV): DV certificates are issued after the CA validates that the requestor owns or controls the domain in question
- Organization Validation (OV): OV certificates can be issued only after the issuing CA validates the legal identity of the requestor
- Extended Validation (EV): EV certificates can be issued only after the issuing CA validates the legal identity, among other things, of the requestor, according to a strict set of guidelines. The purpose of this type of certificate is to provide additional assurance of the legitimacy of your organization’s identity to your site’s visitors. EV certificates can be single or multiple domain, but not wildcard
追加の特徴
多くの認証局は、他のSSL証明書発行業者との差別化を図るため、さまざまな「ボーナス」機能を提供しています。これらの機能のいくつかは、お金を節約することができる場合もありますので、購入する前に自分のニーズと提供内容を比較することが重要です。例として挙げられる機能には、無料の証明書再発行や、www.example.comのようなドメインのベース名に対しても有効な単一ドメイン価格の証明書などがあります。
ステップ2 – CSRとプライベートキーの生成
必要な前提条件を整え、必要な証明書の種類を把握したら、証明書署名要求(CSR)と秘密鍵の生成の時間です。
もしApache HTTPまたはNginxをウェブサーバーとして使用する予定の場合、opensslコマンドを使用してウェブサーバー上でプライベートキーとCSRを生成することができます。このチュートリアルでは、関連するファイルをホームディレクトリに保管することができますが、サーバーのどこでも安全な場所に保存しても構いません。
以下のコマンドを実行して、プライベートキー(example.com.key)とCSR(example.com.csr)を生成してください(example.comをご自身のドメイン名で置き換えてください)。
- openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
この時点で、証明書リクエストに含まれるいくつかの情報の入力を求められます。最も重要な部分はCommon Nameフィールドであり、証明書に使用する名前と一致している必要があります。例えば、example.com、www.example.com、または(ワイルドカード証明書リクエストの場合)*.example.comといった具体例です。OVまたはEV証明書を取得する予定なら、他のすべてのフィールドが組織やビジネスの詳細を正確に反映していることを確認してください。「チャレンジパスワード」の提供は必要ありません。
例えば:
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:sammy@example.com Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []: An optional company name []:
これによって.keyファイルと.csrファイルが生成されます。.keyファイルはあなたの個人鍵であり、安全に保管されるべきです。.csrファイルはSSL証明書を要求するためにCAに送信するものです。
- ls example.com*
example.com.csr example.com.key
CSRを提出する際に、CAにCSRをコピー&ペーストする必要があります。CSRの内容を印刷するには、catコマンドを使用してください。
cat example.com.csr
今、CAから証明書を購入する準備が整いました。
ステップ3:証明書の購入と入手
2022年12月時点で、商用の認証局(CA)のプロバイダーはたくさんあり、自分のセットアップに最適なオプションを比較し、対比することができます。例えば、NamecheapはSSL証明書の転売業者として機能しており、過去には最適な価値を提供するために上位のCAプロバイダーを変更してきました。現在は、Comodo CAの証明書を提供しています。以下はそれらの提供内容の一部です。
選択をした後、前の手順で生成したCSRをアップロードする必要があります。また、CAプロバイダーはおそらく「承認者」ステップもあり、ドメインのWHOISレコード内のアドレスまたはドメインの管理者タイプのアドレスに検証リクエストのメールを送ります。
証明書の承認後、該当の管理者宛にメールで証明書が送信されます。プライベートキーやCSRを生成した場所と同じロケーションに、サーバーにコピーして保存してください。証明書はドメイン名と .crt の拡張子で命名し、例えば example.com.crt としてください。中間証明書は intermediate.crt として命名してください。
証明書は、あなたのウェブサーバーにインストールする準備が整っていますが、最初にファイアウォールにいくつかの変更を加える必要があるかもしれません。
ステップ4:HTTPSを許可するためにファイアウォールを更新します。
Ubuntu 22.04のセットアップガイドでおすすめされているように、ufwファイアウォールが有効になっている場合、HTTPSトラフィックを許可するために設定を調整する必要があります。NginxとApacheは、インストール時にufwにいくつかのプロファイルを登録します。
「現在の設定を確認する場合は、入力してご覧いただけます。」
- sudo ufw status
Nginx HTTPまたはApacheの出力のみが受け取られた場合、ウェブサーバーへのアクセスはHTTPトラフィックのみが許可されます。
Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
HTTPSトラフィックを追加で許可するために、NginxフルまたはApacheフルのプロファイルを許可し、冗長なHTTPプロファイルの許可を削除してください。
- sudo ufw allow ‘Nginx Full’
- sudo ufw delete allow ‘Nginx HTTP’
それによって、このような結果が得られるはずです。
- sudo ufw status
Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
最後のステップでは、証明書をインストールします。
ステップ5 – サーバーに証明書をインストールする
自分の選んだCAから証明書を取得した後は、ウェブサーバーにインストールする必要があります。これには、ウェブサーバーソフトウェアの設定にいくつかのSSL関連の行を追加する必要があります。
このチュートリアルでは、Ubuntu 22.04上でのNginxとApacheの設定方法を説明しますが、最新のLinuxフレーバーでも同様に動作するでしょう。また、このチュートリアルでは以下の仮定がされています。
- The private key, SSL certificate, and, if applicable, the CA’s intermediate certificates are located in a home directory, at /home/sammy
- The private key is called example.com.key
- The SSL certificate is called example.com.crt
- The CA intermediate certificate(s) returned by your provider are in a file called intermediate.crt
Note
「Nginx」を日本語で言い換えると、「エンジンエックス」となります。
以下は、NginxでSSL証明書を手動で展開する手順です。
もしCAが中間証明書のみを返した場合、あなたは証明書とCAの中間証明書を含む「チェーン」証明書ファイルを作成する必要があります。
証明書ファイルがexample.com.crtという名前であると仮定すると、catコマンドを使用してファイルを追加してexample.com.chained.crtという結合ファイルを作成することができます。
- cat example.com.crt intermediate.crt > example.com.chained.crt
ナノまたはお気に入りのテキストエディタを使用して、編集用にデフォルトのNginxサーバーブロックファイルを開いてください。
- sudo nano /etc/nginx/sites-enabled/default
リッスンディレクティブを見つけて、それを443 SSLでリッスンするように変更してください。
/etc/nginx/sites-enabled/default/etc/nginx/sites-enabled/defaultの設定ファイル
…
server {
listen 443 ssl;
…
次に、同じserverブロック内のserver_nameディレクティブを見つけ、その値が証明書の共通名と一致していることを確認してください。また、ssl_certificateおよびssl_certificate_keyディレクティブを追加し、証明書と秘密鍵ファイルのパスを指定してください。
「/etc/nginx/sites-enabled/default」を日本語で言い換えるなら、以下のようになります。
デフォルトのnginx設定ファイル「/etc/nginx/sites-enabled/default」
…
server_name example.com;
ssl_certificate /home/sammy/example.com.chained.crt;
ssl_certificate_key /home/sammy/example.com.key;
…
最も安全なSSLプロトコルと暗号のみを許可するために、次の行をファイルに追加してください。
…
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
…
最後に、デフォルトでHTTPリクエストをHTTPSにリダイレクトするために、ファイルの先頭に追加のサーバーブロックを追加することができます。
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
…
ファイルを保存して閉じてください。もしnanoを使用している場合は、Ctrl+Xを押し、プロンプトが表示されたらYを押して、Enterを押してください。
Nginxを再起動する前に、nginx -tコマンドを使用して設定を検証することができます。
- sudo nginx -t
問題がなければ、SSL over HTTPSを有効にするためにNginxを再起動してください。
- sudo systemctl restart nginx
HTTPS経由でサイトにアクセスしてテストしてみてください。例えば、https://example.comのようになります。また、リダイレクトが正しく動作しているかを確認するために、HTTP経由で接続することもお勧めします。例えば、http://example.comです。
アパッチ
これは、ApacheにSSL証明書を手動で展開する手順です。
お好みのテキストエディタで、nanoを使用して、デフォルトのApache仮想ホストファイルを編集します。
- sudo nano /etc/apache2/sites-available/000-default.conf
「」のエントリを見つけ、それを変更して、ウェブサーバーがポート443でリクエストを受け取るようにしてください。
「/etc/apache2/sites-available/000-default.conf」
…
<VirtualHost *:443>
…
次に、ServerNameディレクティブを追加してください。存在しない場合は追加してください。
「/etc/apache2/sites-available/000-default.conf」
…
ServerName example.com
…
次に、証明書とキーのパスを指定するために以下の行を追加してください。
「/etc/apache2/sites-available/000-default.conf」
…
SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key
SSLCACertificateFile /home/sammy/intermediate.crt
…
現時点では、サーバーはHTTPSのみ(ポート443)で待ち受けるように設定されているため、HTTP(ポート80)へのリクエストは処理されません。HTTPリクエストをHTTPSにリダイレクトするには、以下のコードをファイルの先頭に追加してください(両箇所で名前を置換してください)。
「/etc/apache2/sites-available/000-default.conf」
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
…
ファイルを保存して閉じてください。nanoを使用している場合は、Ctrl+Xを押し、プロンプトが表示されたらYを押してからEnterキーを押してください。
このコマンドを実行することで、ApacheのSSLモジュールを有効にします。
- sudo a2enmod ssl
新しい設定を読み込んで、TLS/SSLを有効化するためにApacheを再起動してください。
- sudo systemctl restart apache2
HTTPSを介してあなたのサイトにアクセスしてテストしてみてください。例えば、https://example.comにアクセスします。また、リダイレクトが正常に動作していることを確認するために、HTTPを介して接続してみることもお勧めします。例えば、http://example.comに接続してみてください。
結論
このチュートリアルでは、商用のCAからSSL証明書を購入する必要があるタイミングを判断する方法、利用可能なオプションを比較する方法について学びました。また、NginxまたはApacheをHTTPS対応に設定する方法、そしてそれらの構成を本番環境に適応させる方法についても学びました。
次に、ロードバランサーと一緒に作業する場合の他のSSLの利用方法について読むことをおすすめします。