ブログに戻る

OpenSSLの基本:秘密鍵、Certificate Signing Request(CSR)、およびSSL証明書の取り扱い

OpenSSLの基本:秘密鍵、Certificate Signing Request(CSR)、およびSSL証明書の取り扱い

OpenSSLは、TLSプロトコルおよび公開鍵基盤で使用されるさまざまなコマンドを含むオープンソースの暗号化ライブラリです。OpenSSLは1998年にリリースされ、Windows、Linux、macOS、およびBSDシステムで利用可能です。OpenSSLコマンドを使用すると、証明書署名要求(CSR)の作成、秘密鍵の生成、SSL証明書の発行など、さまざまなタスクを実行できます。

OpenSSLが重要なのは、SSLが適切に実装されることを保証するためです。SSLを正しい方法で取得することは、ウェブサイトのセキュリティにとって極めて重要です。さらに、大手検索エンジンであるGoogleは、SSL証明書が実装されているウェブサイトを優先します。適切なSSL証明書がない場合、ChromeやFirefoxなどの一部のブラウザは、ウェブサイトを「保護されていない通信」としてマークすることがあります。したがって、暗号化されたHTTPSプロトコルを介してウェブサイトのトラフィックを提供することが極めて重要です。

はじめに

このチュートリアルはチートシート形式のガイドであり、日常のシナリオで使用する可能性のあるOpenSSLコマンドの一部(すべてではない可能性があります)が含まれています。

最初のパートでは、証明書署名要求(CSR)について知っておくべきすべてのことを説明します。ただし、すでに使い慣れている場合は、達成しようとしていることに関連する他のセクションにスキップできます。各セクションには、サブタイトルに示されている内容を実行するためのコマンドラインスニペットが含まれています。

始めましょう!

セクション1:証明書署名要求(CSR)について理解する

証明書署名要求(CSR)は、認証局(CA)からSSL証明書を取得する際の前提条件です。CSRには、キーペアの公開鍵といくつかの追加情報が含まれています。署名プロセス中に、これらを証明書に挿入する必要があります。

CSRの生成中に、識別名(DN)として知られる識別情報の入力を求められます。DNには、証明書を使用するホストの正確な完全修飾ドメイン名(FQDN)であるコモンネーム(CN)など、証明書に必要なフィールドが含まれています。DNのその他のフィールドは、国、都道府県、市区町村名、およびビジネス固有の証明書を生成する場合は組織名や会社名などの追加情報用です。ファイルから、またはコマンドラインを介して情報を提供することにより、プロンプトをスキップすることを選択できます。

以下のスクリーンショットにあるCSR情報プロンプトの例をご覧ください。

以下に示すように -subj フラグを追加し、各フィールドの情報を提供することで、プロンプトを回避して1行のコマンドで情報を提供できます。

上記のコマンドは、CSR情報プロンプトのコードブロックの例に表示されているものと同じ情報を取得します。

セクション2:証明書署名要求の生成

このセクションでは、CSRと秘密鍵を生成するために使用できるOpenSSLコマンドについて説明します。CSRは、認証局(CA)にSSL証明書を要求するために必要です。

秘密鍵と証明書署名要求の生成

認証局にSSL証明書を発行してもらい、ApacheまたはNginxを保護したい場合は、この方法を使用できます。 サーバーでHTTPS(TLSを使用したHTTP)経由のトラフィックを処理できるようにします。このコマンドで生成されたCSRをCAに送信して、CA署名付きのSSL証明書を要求できます。Ubuntu上でApache または Nginx サーバーをセットアップする方法については、詳細なガイドに従ってください。

ターミナルに次のコマンドを入力して、2048ビットの秘密鍵(domain.key)とCSR(domain.csr)を新規作成します:

プロンプトが表示されたら、具体的なCSR情報を入力します。オプションとして、コマンドに -subj フラグを追加することで、プロンプトの入力を省略することもできます:

The -newkey rsa:2048 フラグは、2048ビットのRSAアルゴリズムを使用して鍵を生成することを指定します。 -nodes フラグは、秘密鍵をパスフレーズで暗号化しないことを示します。ここには含まれていませんが、新しいCSRが生成されることを示す -new オプションが暗黙的に指定されています。

既存の秘密鍵から証明書署名要求(CSR)を生成する

すでに秘密鍵をお持ちの場合は、この方法を使用してCSRを生成できます。その後、これを使用してCAにSSL証明書を要求します。次のコマンドを入力して、新しいCSR(domain.csr)を、既存の秘密鍵(domain.key):

プロンプトが表示されたら、具体的なCSR情報を入力します。オプションとして、プロンプトを回避するためにコマンドに -subj フラグ を追加することもできます:

The flag -key フラグは、新しいCSRの生成に使用する既存の秘密鍵(domain.key)を指定します。 -new フラグは、新しいCSRが生成されていることを示します。

既存の証明書と秘密鍵から証明書署名要求(CSR)を生成する

CSRの生成に使用したい既存の証明書がすでにある場合は、この方法を使用できます。この方法は、あなたまたはCAが元のCSRを紛失し、以前に入力したCSR情報を再入力することなく、その情報を使用してCSRを生成する必要がある場合に便利です。このコマンドは、既存の証明書から情報を抽出します。ターミナルに次のコマンドを入力して、新しいCSR(domain.csr)を、既存の 証明書(domain.crt)と既存の秘密鍵(domain.key):

-x509toreq オプションは、CSRの生成に X509 証明書 を使用していることを示します。

セクション3:SSL証明書の生成

状況によっては、CA署名付き証明書を取得する手間をかけずにSSL証明書を使用したい場合があります。このセクションでは、独自の証明書に署名する方法について説明します。これは有効であり、無料です。これらの証明書は自己署名証明書と呼ばれ、非常に一般的です。

自己署名証明書は、独自の秘密鍵で署名されます。自己署名証明書とCA署名付き証明書はどちらも、データやウェブサイトのトラフィックを暗号化する上で同様に機能します。ただし、自己署名証明書の場合、通常、ユーザーのブラウザに証明書が信頼されていないという警告が表示されます。そのため、ユーザーと機密情報をやり取りしないウェブサイトや、本番環境以外のサーバーで自己署名証明書を使用することができます。以下に、自己署名証明書を生成するために使用できるOpenSSLコマンドを示します。

  • 自己署名証明書の生成

この方法を使用して、ApacheまたはNginxサーバーを保護するためのSSL証明書を生成できます。これにより、証明書の署名のためにCAに依頼することなく、トラフィックがHTTPS(HTTP over TLS)で送信されるようになります:

プロンプトに特定のCSR情報を入力します。オプションとして、プロンプトを回避するためにコマンドに -subj flagを追加することもできます:

The -x509フラグは、自己署名証明書の作成を示します。-days 365オプションは、証明書が有効な日数を指定します。この場合は365日です。別の日数を選択することもできます。このコマンドは、証明書に関連付ける情報を保持するための一時的なCSRを生成します。

  • 既存の秘密鍵から自己署名証明書を生成する

この方法は、すでに存在する秘密鍵から自己署名証明書を生成するのに役立ちます。次のコマンドを入力して、自己署名証明書(domain.crt)を、既存の秘密鍵(domain.key)から生成します:):

プロンプトに特定のCSR情報を入力します。オプションとして、プロンプトを回避するためにコマンドに -subj flagを追加することもできます:

The -x509フラグは、自己署名証明書の作成を示します。-days 365オプションは、証明書が有効な日数を指定します。この場合は365日です。別の日数を選択することもできます。-newオプションは、CSR情報の入力を促すプロンプトを開始します。

セクション4:証明書の表示

証明書とCSRファイルは、エンコードされて.pem拡張子で保存されます。これはPrivacy-Enhanced Mailの略です。暗号鍵、証明書、およびその他の重要なデータを保存および送信するためのファイル形式です。PEMファイルは人間が簡単に読めるものではありません。このセクションでは、エンコードされたPEMファイルのエントリを表示するために使用できるコマンドを紹介します。

  • CSRファイルの表示

次のコマンドを入力して、ターミナル上でCSR(domain.csr)の内容を表示および確認します:

たとえば、上記のコマンドは以下のような出力を返します:

Viewing CSR files

  • 証明書エントリの表示

次のコマンドを入力して、証明書(domain.crt)の内容を表示します:):

上記のコマンドは以下のような出力を返します:

OpenSSL

  • 証明書が認証局によって署名されたことの確認

証明書(domain.crt)が特定のCA証明書(ca.crt)によって署名されたかどうかを確認するには、次のコマンドを入力します:

 

セクション5:秘密鍵

秘密鍵の作成と検証に必要なOpenSSLコマンドをお探しの場合は、このセクションが役立ちます。

  • 秘密鍵の作成

パスワードで保護された2048ビットの秘密鍵(domain.key)を作成するには、ターミナルで次のコマンドを入力します:

プロセスを完了するために、コマンドからパスワードの入力を求められます。以下のスクリーンショットを参照してください:

Creating a Private Key

  • 秘密鍵の検証

秘密鍵(domain.key)の有効性を検証するには、ターミナルで次のコマンドを入力します:

次に、パスワードを入力する必要があります。秘密鍵が暗号化されており、正しいパスフレーズを入力すると、暗号化されていない鍵がターミナルに表示されます。以下のスクリーンショットを参照してください。

Verifying a Private Key

  • 秘密鍵が証明書およびCSRと一致することを確認する

秘密鍵(domain.key)が証明書(domain.crt)およびCSR(domain.csr)と一致するかどうかを確認するには、ターミナルで次のコマンドを入力します。

上記のコマンドの出力が同一である場合、秘密鍵、証明書、およびCSRが関連している可能性があります。

  • 秘密鍵を暗号化する

暗号化されていない秘密鍵(unencrypted.key)があり、その暗号化されたバージョンの鍵(encrypted.key)を取得したい場合は、ターミナルで次のコマンドを入力します。

コマンドを実行すると、秘密鍵を暗号化するためのパスフレーズの入力を求められます。

  • 秘密鍵を復号する

暗号化された秘密鍵(encrypted.key)があり、その復号されたバージョン(decrypted.key)を取得したい場合は、ターミナルで次のコマンドを入力します。

コマンドを実行すると、暗号化された鍵のパスフレーズの入力を求められます。正しいパスフレーズを入力すると、復号されます。出力は decrypted.key.

 

セクション 6: 証明書フォーマットの変換

これまでは、ASCII PEMでエンコードされた X.509 証明書を扱ってきました。それでも問題ありませんが、他にもさまざまな証明書のエンコードやコンテナタイプを使用できます。アプリケーションによっては、特定のフォーマットを好む場合があります。さらに、異なるフォーマットの中には、秘密鍵、CSR、CA署名付き証明書などの複数のアイテムを1つのファイルに保持できるものもあります。OpenSSLを使用して、さまざまな証明書フォーマット間で変換することもできます。証明書フォーマット変換のためのOpenSSLコマンドについては、以下をお読みください。

  • PEMからDERへの変換

DER(Distinguished Encoding Rules)は、X.509 証明書と秘密鍵のバイナリエンコードです。PEMエンコードされた証明書(domain.crt)をDERエンコードされた証明書(domain.der)に変換するには、次のコマンドを入力します。

DERエンコードフォーマットのほとんどのユースケースは、Javaプログラミング言語にあります。こちらのUbuntuサーバーにJavaをすばやくセットアップするためのチュートリアルを参照してください.

  • DERからPEMへの変換

DERエンコードされた証明書(domain.der)をPEM証明書(domain.crt)に変換するには、次のコマンドを入力します。

 

  • PEMからPKCS7への変換

たとえば、PEM証明書(domain.crt および ca-chain.crt)をPKCS7ファイル(domain.p7b)に追加したい場合があります。これを実現するためのコマンドは次のとおりです。

You may use the -certfile オプションを複数回使用して、PKCS7ファイルに追加する証明書を指定できます。PKCS7ファイルは、主にJavaキーストアやMicrosoft IISに関連しています。P7Bファイルとも呼ばれ、証明書やCA署名付き証明書を含めることができるASCIIファイルです。

  • PKCS7からPEMへの変換

PKCS7ファイル(domain.p7b)をPEMエンコードされたファイル(domain.crt)に変換するには、ターミナルで次のコマンドを入力します。

 

  • PEMからPKCS12への変換

秘密鍵(domain.key)と証明書(domain.crt)を1つの PKCS12 ファイル (domain.pfx)、次のコマンドを入力します:

このコマンドを実行すると、エクスポートパスワードの入力を求められますが、オプションで空白のままにすることもできます。単一のPEMファイル(domain.crt)内で証明書を連結することにより、複数の証明書をPKCS12ファイルにチェーンさせることができます。PKCS12はPFXとしても知られており、主に以下で使用されます:Microsoft IIS.

  • PKCS12からPEMへの変換

PKCS12ファイル(domain.pfx)をPEMエンコード形式(domain.combined.crt)に変換するには、次のコマンドを入力します:

上記のコマンドによって作成されたPEMファイルには、PKCS12が保持していたすべての複数のアイテムが含まれています。

セクション7:OpenSSLバージョンの確認

実行しているソフトウェアのバージョンは、実行しているアプリケーションの機能に影響を与える可能性があります。そのため、バージョンを確認する必要があります。これはOpenSSLにも当てはまります。あるバージョンでは一部のコマンドラインオプションが欠落しており、別のバージョンでは利用可能である場合があります。実行しているOpenSSLのバージョンを表示するには、次のコマンドを入力します:

以下は、このチュートリアルを作成する際に上記のコマンドを実行したときに得られた出力です:

以下に実際のスクリーンショットを示します:

OpenSSL

結論

このチュートリアルでは、OpenSSLとは何かを説明し、証明書署名要求(CSR)と、サーバー環境で使用できるいくつかの重要なOpenSSLコマンドについて説明しました。

重要なコマンドが不足していますか?または、以下におけるサーバーセットアップでコマンドに問題が発生していますか:CloudSigma?お気軽に当社の24時間年中無休のカスタマーサポートチームまでリアルタイムチャットでご相談ください。

ハッピーコンピューティング!

author

Manpreet Singh

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。