OpenSSLを使用した証明書署名リクエストの作成
秘密キーを使用して、証明書署名リクエスト(CSR)を作成できます。 公開キーと秘密キーを使用して通信を暗号化できます。 ただし、クライアントは、暗号化された通信で使用するために提示された公開証明書を、期待される信頼できるソースからのものとして検証する必要があります。 公開キーを検証する方法がない場合、クライアントは、暗号化を無効にする中間者方式の攻撃に簡単に侵害される可能性があります。
この問題を解決するために、公開キー・インフラストラクチャには通常、認証局(CA)と呼ばれるサード・パーティが関与し、特定の公開キーに対して真正として証明書に署名できます。 クライアントにCA証明書のコピーがある場合、クライアントは証明書の署名に基づいてドメインの証明書を検証できます。 ほとんどのシステムには、デフォルトでいくつかの信頼できるCA証明書がインストールされています。 システムによって信頼されているCA証明書を確認するには、次のコマンドを使用します。
sudo openssl version -d
デフォルトでは、このディレクトリは/etc/pki/tls
で、/etc/pki/tls/certs
サブディレクトリにすべての信頼できる証明書が含まれています。
CAから署名付き証明書を取得するには、関連付けられた秘密キー内の公開キー・コンポーネントを使用してCSRを生成する必要があります。 CSRは次にCAに提示され、CAはリクエスト内の情報を検証し、この情報を使用して有効な署名付き公開証明書を生成します。 CSRは、証明書が使用されるホストのドメイン名に関連付けられています。 CAはこの情報を使用して、指定した有効期限を持つ証明書を作成します。
次の例は、秘密キーからCSRを対話形式で作成するためのコマンド構文を示しています。
sudo openssl req -new -key private.key -out domain.example.com.csr 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) [XX]:GB State or Province Name (full name) []:. Locality Name (eg, city) [Default City]:London Organization Name (eg, company) [Default Company Ltd]:Example Ltd Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:domain.example.com Email Address []:webmaster@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
デフォルト値は/etc/pki/tls/openssl.cnf
ファイルで構成できます。 Common Name
は、CSRで最も重要な値です。 この値は、証明書リクエストを、証明書が使用されるホストのホスト名とドメイン名に関連付けます。 別のドメインの証明書が発行されたホストにクライアントが接続した場合、その証明書は無効になることに注意してください。
CSRと秘密キーを同時に生成できます。 次のコマンドを使用すると、コマンドラインでCSR内の様々なフィールドの値を指定できます。
sudo openssl req -new -nodes '/CN=domain.example.com/O=Example Ltd/C=GB/L=London' \ -newkey rsa:1024 -keyout private.key -out domain.example.com.csr
CSRに含まれる情報は、次のように表示できます。
sudo openssl req -in domain.example.com.csr -noout -text
CSRを作成したら、それをCAに送信できます。 CAはCSRを使用して署名付き証明書を生成し、証明書の検証に使用できる証明書チェーンを使用して証明書を返します。