Skip to content

SSL/TLS証明書

SSL/TLS証明書は以下の2つの方法で取得できます。

  1. 自己署名証明書:自身で発行する証明書を使用することを指します。ただし、自己署名証明書は多くのセキュリティリスクがあり、テストや検証環境での利用のみ推奨されます。
  2. 証明書の申請または購入:無料証明書はLet's EncryptやHuawei Cloud、Tencent Cloudなどのクラウドベンダーから申請できます。また、有料証明書はDigiCertなどの組織から購入可能です。企業ユーザーの場合、より高いセキュリティ保護を得るために、有料のOV以上の証明書の申請を一般的に推奨します。

本ページでは、自己署名の認証局(CA)証明書を作成し、サーバーおよびクライアント証明書を発行する方法を紹介します。

セルフサインCA証明書の作成

前提条件

OpenSSLがインストールされていること。

  1. 以下のコマンドを実行して鍵ペアを生成します。コマンド実行時に鍵を保護するためのパスワードの入力を求められます。このパスワードは証明書の生成、発行、検証時に必要となるため、鍵とパスワードは安全に保管してください。

    bash
    openssl genrsa -des3 -out rootCA.key 2048
  2. 次に、鍵ペアの秘密鍵を使ってCA証明書を生成します。コマンド実行時に証明書の識別名(Distinguished Name, DN)を設定するよう求められます。

    bash
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt

サーバー証明書の発行

先ほど作成したCA証明書を使って、サーバー証明書を発行します。サーバー証明書はサーバー所有者の身元を検証するために使用され、通常はホスト名、サーバー名、またはドメイン名(例:www.emqx.com)に発行されます。サーバー証明書の生成には、CA鍵(rootCA.key)、CA証明書(rootCA.crt)、およびサーバーの証明書署名要求(CSR)(server.csr)が必要です。

  1. サーバー証明書用の鍵ペアを生成します。

    bash
    openssl genrsa -out server.key 2048
  2. サーバー鍵ペアを使ってCSRを作成します。CSRはCAのルート証明書の秘密鍵で署名されることで、証明書の公開鍵ファイルが生成されユーザーに発行されます。コマンド実行時に証明書の識別名(DN)を設定するよう求められます。

    bash
    openssl req -new -key server.key -out server.csr

    以下の情報入力を求められます。各項目の意味は以下の通りです。

    bash
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]: # 国/地域
    State or Province Name (full name) [Some-State]: # 州/県名
    Locality Name (eg, city) []: # 市区町村名
    Organization Name (eg, company) [Internet Widgets Pty Ltd]: # 組織名(会社名)、例:EMQ
    Organizational Unit Name (eg, section) []: # 部署名、例:EMQX
    Common Name (e.g. server FQDN or YOUR name) []: # サーバーの完全修飾ドメイン名(FQDN)、例:mqtt.emqx.com
    ...
  3. サーバーCSRを使ってサーバー証明書を生成し、有効期限を指定します。ここでは365日に設定しています。

    bash
    openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365

    これで証明書一式が生成されます。

    bash
    .
    ├── rootCA.crt
    ├── rootCA.key
    ├── rootCA.srl
    ├── server.crt
    ├── server.csr
    └── server.key

クライアント証明書の発行

クライアント証明書の発行手順はサーバー証明書の発行とほぼ同様です。唯一の違いはCSR作成時に、Common Nameをクライアントのユーザー名やクライアントIDなどの一意の識別子に設定する点です。

クライアント証明書はサーバー証明書と同じCA証明書で署名されるため、上記のCA証明書でクライアント証明書も署名可能です。

次のステップ

SSL/TLS証明書を取得したら、クライアントのSSL/TLS接続を有効化できます。