OpenSSLを使用して証明書を作成し、独自のHTTPSサーバーを実装する

公開Webサイトの場合、ユーザーがWebサイトにアクセスするときに通信を暗号化して、ユーザーがHTTPSを使用してアクセスできるようにするには、Webサイト自体に独自の秘密キーと信頼できる組織によって発行された証明書が必要です。これは、HTTPSアクセスを使用する技術アーキテクチャです。

信頼できる組織が発行した証明書にはお金が必要です。場合によっては、自分で証明書を発行することもできます。たとえば、開発者は独自のテストを開発します(たとえば、パブリックインターネットアクセスの代わりに社内で使用するため)。

DelphiでhttpsをサポートするIndyベースのWebBrokerまたはWebServiceサーバーに基づいて開発した   ブログ投稿で、Delphi IndyのWebサーバープログラムとWebServicesプログラムに自分の秘密鍵と証明書を使用することについて話しました。

OpenSSLを使用して秘密鍵と証明書を作成する特定の方法について簡単に説明します。

この記事の参照:OpenSSL Certificate Authority

--------------------------------------

概念:

1.ブラウザを使用してhttps://website.com/を使用してWebサイトにアクセスします。単純なhttp://website.com/メソッドと比較して、http通信は暗号化されません。Snifferパケットキャプチャツールなどを使用します通信内容はメソッドによって傍受され、直接読み取ることができます。通信層では、httpsはSSLに基づく暗号化された通信であり、傍受された通信コンテンツは、インターセプターによって復号化および読み取ることができません。

2. SSL暗号化通信は、非対称暗号化技術に基づいています。特にHTTPSアクセスをサポートするWebサイトの場合、そのWebサイトには、非対称暗号化用の独自の秘密鍵と、非対称暗号化用の公開鍵を含む証明書が必要です。

2.1。証明書は信頼できる組織(GoogleやMicrosoft、または証明書の発行を専門とする組織など)によって発行されるため、クライアントは、証明書の公開鍵が攻撃者によって偽造されるのではなく、実際にWebサイトであると信頼できます。

2.2。クライアントは証明書が信頼できるとどのように判断しますか?証明書に含まれる情報は、証明書を発行した組織のルート証明書までさかのぼることができるためです。ルート証明書は、信頼できる証明書としてWindowsオペレーティングシステムに追加されます。もちろん、ユーザーはこのルート証明書の信頼を手動で削除することもできます。

3. Webサイトにアクセスする必要がある人が自分の身元を証明するために署名付き証明書を提供する必要があると仮定すると(この種のWebサイトは通常一般向けではありません)、一般ユーザーも自分の秘密鍵と証明書を持つことができます。

5.証明書の信頼チェーン:証明書の発行を専門とする信頼された組織として、独自のルート証明書と秘密キーは通常、ユーザーの証明書の発行には使用されません。このルート秘密鍵のセキュリティは非常に重要であり、通常は使用されません。したがって、ルート秘密鍵とルート証明書は、いくつかの中間証明書の作成と発行に使用されます。次に、中間証明書と秘密鍵を使用して、ユーザーが必要とする証明書を発行します。この役割は[仲介者]と同様に、複数のレベルを持つことができます。これは信頼の連鎖を構成します。つまり、ルート証明書までさかのぼることができる最終的な証明書です。したがって、証明書が正当であるかどうかを確認するために、インターネット接続を確認する必要はありません。ユーザーのシステムに信頼されたルート証明書がある限り、証明書の有効性を確認できます。

5.1。ただし、証明書が取り消された場合(たとえば、その秘密鍵が盗まれた場合)は、オンラインで確認する必要があります。証明書発行機関には、このようなクエリを提供するための専用サーバーがあります。もちろん、これは標準プロトコルであり、コンピュータシステムはこのプロセスを自動的に完了します。

6.ユーザーは、自分の秘密鍵と証明書署名用のCSR(証明書署名要求)を作成できます。このようにして、ユーザーは自分の秘密鍵を保持し、CSRを証明書発行局に送信するだけで済みます。証明書発行局は、このCSRを実際の証明書に署名します。このようにして、ユーザーの秘密鍵は第三者に見られることはありません。

名詞:

1. OpenSSL:OpenSSLは、デジタル証明書を処理するための多数のコマンドラインツールを提供する無料のオープンソース暗号化ライブラリです。これらのツールの一部は、証明機関として機能するために使用できます。

2. CA:認証局は、デジタル証明書に署名するエンティティです。

3.秘密鍵はKeyと呼ばれ、ルートキーは対応するファイル名であるca.key.pemで、公開キーは証明書であり、対応するファイル名(ルート証明書)はca.cert.pemです。ここでの証明書は証明書を意味します。

4. CSR:証明書署名リクエスト。サードパーティは秘密キーを作成し、証明書署名要求をCAに送信します。

 

 

練習:

環境設定:

Windows 10のLinuxサブシステムでOpenSSLを使用しています。私のWindows 10のLinuxサブシステムにはUbuntuがインストールされていますが、インストールが完了すると、OpenSSLが既にインストールされています。そうでない場合は、LinuxにOpenSSLをインストールする方法に関する多くの記事があります。または、WinバージョンのOpenSSLをWindowsに直接インストールします。コマンドラインの操作は同じであると思います。

つまり、Windows PowerShellを起動し、内部にbashコマンドを入力してLinuxに入ります。そのため、OpenSSLを直接実行できます。

オペレーティング:

1.ルート秘密鍵と証明書のペアを作成します

1.作業ディレクトリを準備します。現在のユーザーの下にcaというディレクトリを作成しました。Windowsでは、実際には現在のWindowsユーザーのディレクトリにあります。

2. caディレクトリの下に3つのフォルダーを作成します。

mkdir certs crl newcerts private

 

3. caディレクトリに2つのファイルを作成し、コマンドを入力します(注:以下のすべてのコマンドの現在のパスはcaディレクトリです

3.1。タッチindex.txt

3.2。エコー1000>シリアル

4.プライベートディレクトリの権限を変更します。chmod700 private

5.ルートキーを作成します。opensslgenrsa -aes256 -out private / ca.key.pem 4096というコマンドを入力して、ルートキーを作成します。上記のコマンドをコピーした後、PowerShellウィンドウをマウスで右クリックして貼り付けます。Enterキーを押すと、パスワードの入力を求められます。自作のパスワードを入力してルートキーを作成します。

5.1。ルートキーはルートの秘密キーであり、そのファイルはca.key.pem、プライベートディレクトリにあります。

5.2。chmod 400 private / ca.key.pem

5.3。このca.key.pemファイルは暗号化されており、使用するたびにパスワードを入力する必要があります。このパスワードは、作成時にシステムが入力を要求するパスワードです。

6.ルート証明書を作成します。openssl.cnfは、テキスト構成ファイルであるルート証明書を作成するために必要です。

6.1。この記事の上部にあるリファレンスリンクには、openssl.cnfテンプレートがあります。ダウンロードして、小さな変更を加えて、または変更せずに使用してください。

6.2。casディレクトリにopenssl.cnfを配置します。次のコマンドを入力します。

openssl req -config openssl.cnf \

-key private/ca.key.pem \

-new -x509 -days 7300 -sha256 -extensions v3_ca \

-out certs/ca.cert.pem

 6.3。証明書の作成プロセス中に、秘密鍵を読み込めません」というエラーメッセージが表示されました。理由は、入力エラーが原因で、コマンドの実行中にシステムがca.key.pemのパスワードの入力を要求するためです。

6.4。作成した証明書を確認します:openssl x509 -noout -text -in certs / ca.cert.pem証明書の内容を確認できます。この時点で、ルート秘密鍵とルート証明書が作成されます。

2.中間証明書ペアを作成します

1. mkdir ca /​​ intermediateは、中間証明書を格納するためにこのディレクトリを作成します。したがって、caディレクトリの下に中間ディレクトリがあります。

1.1。cd ca /​​ intermediate

1.2。mkdir certs crl csr newcerts private中間ディレクトリ用に3つのサブディレクトリを作成します。構造はcaディレクトリと同じように見えます。

1.3。chmod 700プライベート

1.4。ファイルの作成:touch index.txt

1.5。ファイルの作成:echo 1000>シリアル

1.6。echo 1000> crlnumberこのファイルは、証明書失効リストを保存するために使用されます。

2.仲介者の秘密鍵を作成します。以下の操作はcaディレクトリにあります。

2.1。次のコマンドを実行して秘密鍵キーを作成します(コマンドの実行中にパスワードの入力を求められます)。

openssl genrsa -aes256 \

-out intermediate/private/intermediate.key.pem 4096 

2.2。chmod 400 medium / private / intermediate.key.pemこのIntermediate.key.pemは、仲介者の秘密鍵ファイルです。

3.仲介業者の証明書を作成します。

3.1。最初に、ブローカーが必要とするopenssl.cnfファイルを準備します。以前のcaにあるファイルを中間ディレクトリにコピーするだけです。

3.2。次のコマンドを実行して、証明書をCSRにします。

openssl req -config intermediate/openssl.cnf -new -sha256 \

-key intermediate/private/intermediate.key.pem \

-out intermediate/csr/intermediate.csr.pem

上記のコマンドを実行すると、ミドルマンの秘密鍵のパスワードを入力するように求められます。 

ここで、中間証明書を作成するときは、構成.cnfファイルでAとしますコマンドで大文字と小文字の両方を入力する必要がある場合、構成ファイル内の0.organizationNameの場所は、ルート証明書と同じ名前でなければなりません。間違いはありません。B.  commonNameはルート証明書とは異なる必要があります。コマンドの実行後に名前の入力を求められた場合、commonNameはルート証明書とは異なる名前する必要があります。

3.3。ルート証明書で中間証明書に署名します。

openssl ca -config openssl.cnf -extensions v3_intermediate_ca \
      -days 3650 -notext -md sha256 \
      -in intermediate/csr/intermediate.csr.pem \
      -out intermediate/certs/intermediate.cert.pem

 

3.4。chmod 444中間/証明書/中間.cert.pem

3.5。この中間証明書を確認します。

openssl x509 -noout -text \
      -in intermediate/certs/intermediate.cert.pem

3.5。アプリケーション(Webブラウザーなど)が中間CAによって署名された証明書を検証しようとするとき、ルート証明書に対して中間証明書も検証する必要があります。信頼チェーンを完成させるには、アプリケーションに提示するCA証明書チェーンを作成します。

CA証明書チェーンを作成するには、中間証明書とルート証明書を一緒に接続します。後でこのファイルを使用して、中間CAによって署名された証明書を検証します。

次のコマンドを実行します。

cat intermediate/certs/intermediate.cert.pem \
      certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
	  chmod 444 intermediate/certs/ca-chain.cert.pem

3.6。クライアントアプリケーションはまだ証明書を認識していないため、証明書チェーンファイルにはルート証明書が含まれている必要があります。より良いオプション(特にイントラネット管理の場合)は、接続が必要な各クライアントにルート証明書をインストールすることです。この場合、チェーンファイルに必要なのは中間証明書だけです。

 

3. Webサイトの証明書ペアを作成します

Webサイトで使用される証明書ペアには、中間証明書が発行されます。製造工程は上記2つと全く同じです。

1. Webサイトの秘密キーであるキーを作成します。

 

openssl genrsa -aes256 \
      -out intermediate/private/www.myhost.net.key.pem 2048

1.1。最初の行の-aes256は、このキーの暗号化パスワードです。Webサイトが初めて証明書をロードするとき、キーをロードし、パスワードを入力する必要があります。Webサーバーがこのキーをロードするときにパスワードを入力したくない場合は、-aes256オプションは必要ありません。

1.2。OpenSSL証明書を使用するためにIndy of Delphiによって提供されるコントロールTIdServerIOHandlerSSLOpenSSLにはOnGetPasswordイベントがあり、プログラムはこのキーを使用するために、ここで上記のキーのパスワードを入力できます。 

1.3。chmod 400中間/プライベート/mis.myhost.net.key.pem

 

2. Webサイトの証明書を作成します。

2.1。次のコマンドを実行して、WebサイトのCSRを作成します。

cd /root/ca
# openssl req -config intermediate/openssl.cnf \
      -key intermediate/private/mis.myhost.net.key.pem \
      -new -sha256 -out intermediate/csr/www.myhost.net.csr.pem

 2.2。上記のコマンドの実行中に、名前、電子メールなどの情報を入力するように求められます。ここで、commonNameを入力する場合は、Webサイトのアドレスを入力する必要があり、中間証明書の作成時に入力したcommonNameと同じであってはならないことに注意してください。同じを正常に作成することはできません。

2.3。Webサイト証明書CSRの中間証明書署名を使用して、使用する最終的な証明書を作成します。

openssl ca -config intermediate/openssl.cnf \
      -extensions server_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/mis.myhost.net.csr.pem \
      -out intermediate/certs/mis.myhost.net.cert.pem

 2.4。chmod 444中間/証明書/mis.myhost.net.cert.pem

2.5。検証:

openssl x509 -noout -text \
      -in intermediate/certs/mis.myhost.net.cert.pem

この時点で、使用可能な証明書が完成しています。

この証明書は、Webサイトへの暗号化されたアクセスに使用できます。私のブログ投稿では、Delphiプログラムで使用する方法についても説明しました。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/pcplayer/article/details/108498115