ウェブサイト検索

商用証明書機関からSSL証明書をインストールする方法


紹介

このチュートリアルでは、信頼できる商業証明書機関(CA)からSSL証明書を取得し、インストールする方法を説明します。SSL証明書はウェブサーバーがトラフィックを暗号化することを可能にし、訪問者に対してサーバーのアイデンティティを検証するメカニズムも提供します。SSLを使用しているウェブサイトには、https://プロトコルを介してアクセスされます。

2010年代半ば以前、多くの小規模なウェブサイトは必ずしもSSLやHTTPSを使用していませんでした。それ以来、セキュリティに対する期待が高まり、Let’s Encryptプロジェクトが生まれました。このプロジェクトは、大規模に無料で信頼できるSSL証明書を提供し、ほぼ誰でも必要に応じてHTTPSを利用できるようにしました。

ただし、Let's Encryptの証明書にはいくつかの制限があります。証明書は3か月ごとに期限が切れ、通常は機能する自動更新スクリプトを用意する必要があるため、これができない環境では使いにくくなります。また、Let's Encryptはあなたのウェブプレゼンスの法的所有権を検証する拡張検証証明書や、あなたが手動で各サブドメインを登録することなく、ウェブサイトのすべてのサブドメインに自動的に一致するワイルドカード証明書を提供していません(たとえば、shop.example.comのように)。

ほとんどのユーザーにとって、これらは重要な制限とはならないでしょう。Let’s Encryptは、多くの個人および商業ウェブサイトにとって人気の選択肢です。ただし、特定のエンタープライズソフトウェアの要件がある場合や、非常に大規模な商業運営を行っている場合は、商業CAから証明書を購入することを検討すべきです。

このチュートリアルでは、信頼された証明書機関からSSL証明書を選択して展開する方法を説明します。SSL証明書を取得した後、このチュートリアルでは、NginxおよびApacheウェブサーバーへのインストール方法を説明します。

前提条件

商業認証局からSSL証明書を取得しようとするには、いくつかの前提条件があります:

  • 登録済みのドメイン名。このチュートリアルでは、example.comを通じて使用します。ドメイン名はNamecheapで購入するか、Freenomで無料でもらうか、お好きなドメインレジストラを使うことができます。

  • あなたのドメインのWHOISレコードにあるメールアドレスの1つ、またはドメイン自体の「管理者タイプ」のメールアドレスへのアクセス。SSL証明書を発行する認証機関は、通常、ドメインのWHOISレコードにあるメールアドレスの1つ、またはドメインの一般的な管理者メールアドレスに検証メールを送信することでドメインの管理権を確認します。拡張検証証明書を発行してもらうには、ウェブサイトの所有者の法的な身分を確立するための書類をCAに提供する必要があります。

  • あなたのサーバーのためにDNSレコードが設定されました。DigitalOceanを使用している場合は、これらを追加する方法についての詳細は、私たちのDNSドキュメントを参照してください。

このチュートリアルでは、Ubuntu 22.04の初期サーバーセットアップのチュートリアルに従ってセットアップされたUbuntu 22.04サーバーの設定手順を提供します。このチュートリアルには、sudoが有効な非rootユーザーとファイアウォールが含まれます。ほとんどの現代的なLinuxのディストリビューションも同様に機能します。

あなたは、Ubuntu 22.04にNginxをインストールする方法やApacheウェブサーバーをインストールする方法に従って、NginxまたはApacheのようなウェブサーバーをインストールしておくべきです。あなたのドメインのためにサーバーブロック(またはApacheバーチャルホスト)が存在することを確認してください。

ステップ1 – 認証局の選択

どの認証局を使用するべきか分からない場合はいくつかの要因を考慮する必要があります。

ルート証明書プログラムメンバーシップ

最も重要な点は、選択したCAが最も一般的に使用されるオペレーティングシステムやWebブラウザのルート証明書プログラムのメンバーであること、つまり「信頼された」CAであり、そのルート証明書が一般的なブラウザやその他のソフトウェアに信じられていることです。あなたのウェブサイトのSSL証明書が信頼されたCAによって署名されている場合、そのアイデンティティはCAを信頼するソフトウェアによって有効と見なされます。

出会うことになるほとんどの商業CAは、一般的なルートCAプログラムのメンバーですが、証明書の購入を行う前に確認することに損はありません。たとえば、Appleは信頼されたSSLルート証明書のリストを公開しています。

証明書の種類

必要な証明書の種類を提供しているCAを選択するようにしてください。多くのCAは、これらの証明書の種類をさまざまな名前と価格体系で提供しています。以下は各種類の簡単な説明です:

  • シングルドメイン: 単一のドメインに使用されます。例: example.com。ただし、www.example.comのような追加のサブドメインは含まれません。
  • ワイルドカード: ドメインとそのサブドメインすべてに使用されます。たとえば、*.example.comのワイルドカード証明書は、www.example.comやstore.example.comでも使用できます。
  • 複数ドメイン: SANまたはUC証明書として知られており、これは、主題の代替名フィールドに追加される複数のドメインおよびサブドメインで使用できます。たとえば、1つのマルチドメイン証明書は、example.com、www.example.com、およびexample.netと一緒に使用できます。

前述の証明書の種類に加えて、CA(認証局)が提供する異なるレベルの検証があります。

  • ドメイン検証 (DV): DV証明書は、CAが申請者が該当ドメインを所有または管理していることを検証した後に発行されます。
  • 組織認証 (OV): OV証明書は、発行CAがリクエスターの法的な身分を確認した後にのみ発行されます。
  • 拡張検証(EV): EV 証明書は、発行 CA がリクエスターの法的な身元を厳格なガイドラインに基づいて検証した後にのみ発行されることができます。この種類の証明書の目的は、サイトの訪問者に対して組織の身元の正当性に対する追加の保証を提供することです。EV 証明書は、単一または複数のドメインとして発行できますが、ワイルドカードではありません。

追加機能

多くのCAは、SSL証明書を発行する他のベンダーと差別化するために、さまざまな「ボーナス」機能を提供しています。これらの機能のいくつかは、最終的にお金を節約できることがあるため、購入する前に自分のニーズを提供内容と照らし合わせることが重要です。注目すべき機能の例には、無料の証明書再発行や、www.とドメインのベース名の両方で機能する単一ドメイン価格の証明書(e.g. www.example.com、SANがexample.com)が含まれます。

ステップ2 – CSRと秘密鍵の生成

必要な前提条件を整理し、必要な証明書の種類がわかったら、証明書署名要求(CSR)と秘密鍵を生成する時です。

Apache HTTPまたはNginxをウェブサーバーとして使用する予定であれば、opensslコマンドを使用して、ウェブサーバー上でプライベートキーとCSRを生成できます。このチュートリアルでは、関連するすべてのファイルをホームディレクトリに保管しておくことができますが、サーバー上の任意の安全な場所に保存することもできます。

プライベートキー(example.com.keyと呼ばれる)とCSR(example.com.csrと呼ばれる)を生成するには、次のコマンドを実行してください(example.comをあなたのドメイン名に置き換えてください):

  1. 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に送信するものです。

  1. ls example.com*
example.com.csr  example.com.key

証明書リクエストをCAに提出する際、CSRをコピーして貼り付ける必要があります。CSRの内容を印刷するには、catを使用してください:

cat example.com.csr

これでCAから証明書を購入する準備ができました。

ステップ3 - 購入と証明書の取得

多くの商業用CAプロバイダーが存在し、自分の設定に最も適したオプションを比較検討できます。たとえば、NamecheapはSSL証明書のリセラーとして機能し、過去には最適な価値を提供するために上流のCAプロバイダーを変更したことがあります。現在、彼らはComodo CAの証明書を提供しています。2022年12月時点の彼らの提供のサンプルは以下の通りです。

選択を行った後、前のステップで生成したCSRをアップロードする必要があります。CAプロバイダーには、ドメインのWHOISレコードにあるアドレスまたは証明書を取得しているドメインの管理者タイプのアドレスにバリデーションリクエストのメールを送信する「承認者」ステップがある場合もあります。

証明書が承認されると、証明書は指定された管理者にメールで送信されます。プライベートキーとCSRを生成したのと同じ場所に、証明書をコピーして保存してください。証明書にはドメイン名と.crt拡張子を付けて命名します。例えばexample.com.crtのようにし、中間証明書にはintermediate.crtと名付けます。

証明書は現在、あなたのウェブサーバーにインストールする準備が整いましたが、最初にファイアウォールにいくつかの変更を加える必要があるかもしれません。

ステップ4 - HTTPSを許可するためにファイアウォールを更新する

もし、Ubuntu 22.04のセットアップガイドで推奨されているようにufwファイアウォールが有効になっている場合は、HTTPSトラフィックを許可するために設定を調整する必要があります。NginxとApacheは、どちらもインストール時にufwにいくつかのプロファイルを登録します。

現在の設定は次のように入力することで確認できます:

  1. 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 FullまたはApache Fullプロファイルを許可し、冗長なHTTPプロファイルの許可を削除します:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

それはこのような結果を生むはずです:

  1. 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 - サーバーに証明書をインストールする

選択した認証機関から証明書を取得した後、それをウェブサーバーにインストールする必要があります。これには、ウェブサーバーソフトウェアの設定にいくつかのSSL関連の行を追加することが含まれます。

このチュートリアルでは、Ubuntu 22.04上でのNginxとApacheの設定について説明しますが、ほとんどの最新のLinuxディストリビューションでも同様の手順が適用されます。このチュートリアルでは、次のような前提を置いています:

  • 秘密鍵、SSL証明書、および該当する場合はCAの中間証明書は、ホームディレクトリの/home/sammyに格納されています。
  • プライベートキーは example.com.key と呼ばれます
  • SSL証明書はexample.com.crtと呼ばれます
  • あなたのプロバイダーから返されたCA中間証明書は、intermediate.crtというファイルにあります。

注意: 本番環境では、これらのファイルは通常 root のみがアクセスできる場所に保存する必要があり、秘密鍵は安全に保管する必要があります。例えば、Let’s Encrypt は生成した証明書を /etc/letsencrypt に保存します。本番環境の例は、マルチサーバ構成の複雑さにより異なる場合があります。

Nginx

これらは、NginxにSSL証明書を手動でデプロイするための手順です。

CAが中間証明書のみを返した場合は、あなたの証明書とCAの中間証明書を含む「チェーン」証明書ファイルを作成する必要があります。

あなたの証明書ファイルが example.com.crt と呼ばれていると仮定すると、cat コマンドを使用してファイルを一緒に追加し、example.com.chained.crt という名前の結合ファイルを作成することができます:

  1. cat example.com.crt intermediate.crt > example.com.chained.crt

nanoやお気に入りのテキストエディタを使用して、デフォルトのNginxサーバーブロックファイルを編集のために開きます:

  1. sudo nano /etc/nginx/sites-enabled/default

listenディレクティブを見つけて、それをlisten 443 sslに修正します:

…
server {
    listen 443 ssl;
…

次に、同じサーバーブロック内でserver_nameディレクティブを見つけ、その値が証明書の共通名と一致していることを確認してください。また、証明書と秘密鍵ファイルのパスを指定するためにssl_certificateおよびssl_certificate_keyディレクティブを追加してください:

…
    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を使用して設定を検証できます:

  1. sudo nginx -t

問題がなければ、Nginxを再起動してHTTPS上でSSLを有効にします:

  1. sudo systemctl restart nginx

HTTPS経由でサイトにアクセスしてみてください。例えば、https://example.comのように。また、HTTP経由で接続してみることもお勧めします。例えば、http://example.comのように、リダイレクトが正しく機能しているか確認するためです。

アパッチ

これらはApacheにSSL証明書を手動でデプロイするための手順です。

nanoまたはお気に入りのテキストエディタを使用して、デフォルトのApache仮想ホストファイルを編集するために開いてください:

  1. sudo nano /etc/apache2/sites-available/000-default.conf

ポート443でウェブサーバーがリッスンするように、<VirtualHost *:80> エントリを見つけて修正してください:

…
<VirtualHost *:443>
…

次に、ServerNameディレクティブを追加します。既に存在しない場合は:

…
ServerName example.com
…

次に、証明書とキーのパスを指定するために以下の行を追加します:

…
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にリダイレクトするには、ファイルの先頭に次の内容を追加します(両方の場所で名前を置き換えてください):

<VirtualHost *:80>
   ServerName example.com
   Redirect permanent / https://example.com/
</VirtualHost>
…

ファイルを保存して閉じてください。nanoを使用している場合は、Ctrl+Xを押し、プロンプトが表示されたらYを押してからEnterを押してください。

このコマンドを実行してApache SSLモジュールを有効にします:

  1. sudo a2enmod ssl

さて、新しい設定を読み込むためにApacheを再起動し、HTTPS経由でTLS/SSLを有効にします。

  1. sudo systemctl restart apache2

HTTPS経由でサイトにアクセスしてみてください。例えば、https://example.comのように。また、HTTP経由で接続してみることもお勧めします。例えば、http://example.comのように、リダイレクトが正しく機能しているか確認するためです。

結論

このチュートリアルでは、商用CAからSSL証明書を購入する必要がある場合を判断する方法と、利用可能なオプションを比較・対比する方法について学びました。また、HTTPSサポートのためにNginxまたはApacheを構成する方法や、プロダクション用にその設定を適応させる方法も学びました。

次に、ロードバランサーを使用する際のような他のSSLのユースケースについて読むことをお勧めします。

関連記事: