この記事は、暗号化の概念とインターネット公開鍵インフラストラクチャ(PKI)をカバーする3つのパート2です。このシリーズの最初の記事では、暗号化における対称および公開鍵(非対称)暗号化を紹介しました。公開鍵暗号化の基本的な概念に精通していない場合は、これを進める前にパート1を読む必要があります。
このパートでは、トランスポート層セキュリティとSecure Socket Layer(TLS / SSL)の基本、インターネットPKIの仕組み、およびTLS/SSLタスク用のスイスアーミーナイフであるOpenSSLについて説明します。 OpenSSLを使用してキーペアを作成する方法と、署名のために認証局(CA)に送信する証明書署名要求(CSR)を生成する方法について説明します。その後、知っておくべきインターネットPKIの弱点について説明します。
[次のこともお楽しみいただけます:システム管理者向けのセキュリティアドバイス:ITの所有、ITの保護、ITの保護]
序文
あなたが私のようなシステム管理者であり、あなたのタスクの1つがWebサーバーを管理することであると仮定します。ユーザーは信頼性、整合性、プライバシーを重視しているため、何らかの暗号化を使用してWebアプリケーションを保護する必要があります。*サイトを誰が使用しているかが事前にわからないため、対称暗号化はテーブルから外れています。キー配布の問題。代わりに、次のセクションで公開鍵暗号化を使用します。
TLS / SSL
Transport Layer Securityの頭字語 およびSecureSocket Layer TLSとSSLです。それらはほとんどの場合交換可能に使用され、それは問題ありません。古いSSLプロトコルバージョンは非推奨ですが、最近では通常、Web上でTLSv1.2とTLSv1.3が見つかります。 TLSは、一部のクライアントと一部のWebサーバー間のHTTPS接続で使用されます。次の画像は、HTTPSハンドシェイクの簡単な例を示しています。
タイミングデータを使用した完全なTLS1.2ハンドシェイク(出典:Full_TLS_1.2_Handshake.svg)
まず、よく知られているTCPハンドシェイクがクライアントとサーバーの間で発生します。次に、クライアントは ClientHelloを送信してHTTPSハンドシェイクを開始します。 。このステップでは、クライアントは、要求するサーバー名とサポートされている暗号スイートに関する情報を送信します。サーバーはServerHelloで応答します 、選択した暗号スイート、接続パラメータを送信し、進行中の接続の対称鍵を計算するための情報を送信します。最後になりましたが、クライアントに対して自分自身を認証するために証明書を送信します。
TLSとSSLを完全に理解したい場合は、IvanRisticによるBulletproofSSLとTLSの本をお勧めします。
サーバーがクライアントに送信した証明書に注目してください。これには、サーバーの公開鍵が含まれています。これは、クライアントがデータをサーバーに送信する前に暗号化するために使用します。信頼できる認証局(CA)が証明書の公開鍵に署名しました。現在、すべてのオペレーティングシステムとWebブラウザーには、さまざまな信頼できるCAの公開鍵を含むストアが付属しています。次に、これらの公開鍵を使用して、ここで説明するようなサーバー証明書の署名を検証します。このようにして、クライアントはサーバーの信頼性を確認し、サーバーが接続したい正しいホストであることを確認できます。
ご覧のとおり、このシナリオでは、公開鍵暗号化が2つのタスクに使用されます。
- サーバーの信頼性を確認する
- サーバーの公開鍵を使用して、暗号化されたデータをサーバーに送信します
公開鍵暗号化は、HTTPS接続を確立し、さらなる通信に使用される対称セッション鍵を計算するためにのみ使用されることに注意してください。これは、対称暗号化が非対称暗号化よりもはるかに高速であるためです。
OpenSSL
では、問題は、ウェブサーバーのキーペアをどのように取得するかということです。前述のように、OpenSSLはSSLおよびTLSタスク用のスイスアーミーナイフです。ドキュメントにはまだ改善の余地があるため、無料の本、IvanRisticによるOpenSSLCookbookを読んで、すべての詳細を入手することをお勧めします。私の記事では、単一のドメイン名と複数のドメイン名を含むCSRのキーペアと証明書署名要求(CSR)の作成に焦点を当てています。
CSRは、署名のためにドメインに関する公開鍵およびその他の情報をCAに送信するために必要です。返される署名付き公開鍵は、対応する秘密鍵とともにWebサーバーにインストールする証明書です。
単一ドメインの秘密鍵とCSRを作成する
次に、秘密鍵(RSA 2048ビット)とCSRを1つのステップで作成する例を示します。必要なすべての情報を入力します。
$ openssl req -newkey rsa:2048 -keyout example.com.key -out example.com.csr
Generating a RSA private key
...............+++++
.................................................................................................................+++++
writing new private key to 'example.com.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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]:DE
State or Province Name (full name) [Some-State]:EXAMPLE-STATE
Locality Name (eg, city) []:Example City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Ltd
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
現在の作業ディレクトリに両方のファイルがあります。作成プロセス中に入力したパスフレーズは、秘密鍵ファイルを保護します。ある種のテキストビューアでそれらを開くと、これらが秘密鍵とCSRであることがわかるだけで、それ以上のプレーンテキスト情報は見つかりません:
$ cat example.com.{key,csr}
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIaoQRP0LFgu4CAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECFWvUl1tJyJNBIIEyCFv43Q7xe+F
Am5EtIJO2FtwbjXV9hQpl4Zb4JlG7vQvt7aH1/hQcPFYnjJJnlu8gP84tne1riSc
2YWxsZQ3sZLtIOrVIqEOsCumJpoqS8AsAw/fuFIwRpXZenX2/snGwQSVN545BDGV
lzGnUph8lnrG9Kho5loiqYTAQWYUCwgLwe8fWOdXXWY6+UdKjJHaUYxHdkuMBvnQ
FJ+Iln4b4onLrGcFKJgNkJ/AShkW/m31ZvRXNX2QiKgl6u3zDTsE3l6rfVaPEJyx
g43guPil9nNrGS5rPt6XWEvtWSTfSFEVrMTBSTr1BrUipfnN3gFfCmtNqoSNdkjk
pI9vsRekjzGZnVp763WGXmxx59/sXwgLnA7Br5K+7B1ECA9Z8iRzfB4OmSrR8HVb
uYGRlq5jq/GgBTddFQRYUna0bufGRRBntIjOesYGbvWrg4dTnF8jncqvM+eXJtCv
Va0RrpTtuZbdRf3/5scjlFpvWQs705tbi777AIw9MySVpsgFY8eD8shKYNpQoRx5
kiILlkbabNK1EPOdnCBSCfHoK2ssZFKegc0xG8HLM4iwVS/fg3O02HS2jP74wPJ9
1sN81IvJ+W1OJ8MizkLJDc4bAER/yo9O7hMJ1ITxlUXWcr0Zwxi1cQzmLLocFh46
uKQ8N9iAEnl1m2Ax98hbxtrHVVjGBBbrcIrrp/KfMAUcM6goUjz2PG9+XI5/6bkA
0g4qSNVotdPaYTnco0eRClzxvollE8CBeVECql7+KN3VA0VM2Rtpb98QQZ+asKkY
fYf8byQLiCPED4NPkLeYKKL9CrMz+p7Zt3j/q5n0CLEbf/ZX8S6677m6+Hie9ArE
PU1fwpxonH9b4zvZnrsa9FfKW7zIWXq/tt885EjqzxvVUQKcCn2A3lXoXC3FoLaA
jmWKjue9vZAdn29C0E4+Ruk4oGfr/FipI4lZKH+sT1u86Gotjg2W3ZIe8I+Na7v/
SJnAO86L7cuG6PFHyt8tBYF7l3WV465GP5PW3bJc0TQnNRUoisMzEH0CRlwYqCHj
YIOeZWFCJeyR52Y8qI2yG/hgKMJQ4e/0vFy+y7lOdU6TSKZ96E3XEVjLPsHKCW0S
aEX1gLQdtoTQciwAnzrl9uu/xbyoW7CLTg7Hny8LgJZr+YQaILd1wljEX3KflicE
N7stTCj0eF8AH2LgPMhvJ9Zy6OGdVw/oU9rJXhQD3Z6WpQkCrrfE4/LymuXGdmGI
bGlCpuHB8Vlij4om2YnOZebPiDiOLZ9cawanmZkm3YedPbYJbv1NW9koToLKbuW8
1ZDyzcpFjOaYBtut6RdvNYfZ1OmJPd8jyKuGKRYnqDbeQ/Snk74BNkBiV+02ozGF
aGd1s45A94fFAtzFObY0HZ4JucjspJK6Y2yphPKhPHQiW7vm1mlvRgY3WN6DINq4
+3Irdwpxky7hxPToh2aUjzlTLdruqR1dk+JSV1+SFypoBhPBlbx/zglh0ncttbeM
5/Khgu+uXp+ePf7g64lnPFjVIoVBega4CAMHQqffA5c2z3f9qKThIH1IgS5e7GOR
GHL57MVtvBjUtUyc8eFx4EzgmWVV7D/JzxVDpUBWeAn1yNeOoxjuf2tkZgb/+GNi
tlbRN/s0Yo8lnbEuplF9UQ==
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
MIIC4TCCAckCAQAwgZsxCzAJBgNVBAYTAkRFMRYwFAYDVQQIDA1FWEFNUExFLVNU
QVRFMRUwEwYDVQQHDAxFeGFtcGxlIENpdHkxFDASBgNVBAoMC0V4YW1wbGUgTHRk
MQswCQYDVQQLDAJJVDEUMBIGA1UEAwwLZXhhbXBsZS5jb20xJDAiBgkqhkiG9w0B
CQEWFXdlYm1hc3RlckBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMAc6BwShsBWi1DcsHnF88m99fDiDESpD9zq4VCq+wpcc6RjPmAf
7uG8ha+CSiyvr9fDgJfzMDpDUG5W2R+WLQhe+9IS8VFHqpT7ePwHlFt7h+0Rx3ke
us9ErY085jFHvGziuhuh4fGE0Ez69LT0ZujeeNad2GEuGQSRTWuloNVTyFy0hIb2
f6fAsGBGbW9uSjW8L4hIPpmUgL5LDZ9Ev6p9/MrNITeUwkIi+FaM3NYrf9Xx2MI2
/frl7ZTl2uGyW8uh24sd6vMoaw1arI+RI/mcxyvADP5qAtnDRhXCPgZBPI0sFpX4
MAVj99+VvxahSubB3yxca8DDFn8cbBfZMBUCAwEAAaAAMA0GCSqGSIb3DQEBCwUA
A4IBAQADSBAnoTFFUphk7EnMRM34oFg4tzoGkV46eLLnUlu0cLmggzuw+BBg0/Zx
3vVjqu7wudr9bg+u0vNHc0UjuAmU5NVhwb4WHBZHw5Lba6WNKVLzYoC4ZzeU1MyW
TYh7O76mZzmXVpppotcK5uU5ojDhiiaxkQuqWlsk3txdf/qJ/1F/pFnHRydT0hMf
JQBYo7FLIa+ZuHEysjoUmoo0arLJyuymlWYWFMzV/ds0r4ci9AtUfUUbt3JgcVhZ
+h0KQNf26D96c9C+5v5PnV2pVs4tIzY08HQKEmbWqKyTWToxwID6Qi/dNqhDwt7B
UN4g4tNW1wIRPW76nHKGsgTRJFRq
-----END CERTIFICATE REQUEST-----
まあ、それは人間の心にはあまり役に立たないので、次のセクションでは、秘密鍵のパラメータとCSRをより人間が読める形式で確認するためのコマンドを見つけることができます。
秘密鍵の確認
注意 :秘密鍵を他人と共有しないでください。彼らはあなたとあなただけです。それらを秘密にし、安全で、健全な状態に保ちます。秘密鍵、CSR、および証明書を処理するための組織のポリシーに従ってください。組織(および仕事)のセキュリティはそれに依存する可能性があります。
次の例は、秘密鍵がどのように見えるかを示しています。通常の操作では、通常、そのような秘密鍵を印刷する必要はありません。
$ openssl pkey -text -noout -in example.com.key
Enter pass phrase for example.com.key:
RSA Private-Key: (2048 bit, 2 primes)
modulus:
00:c0:1c:e8:1c:12:86:c0:56:8b:50:dc:b0:79:c5:
f3:c9:bd:f5:f0:e2:0c:44:a9:0f:dc:ea:e1:50:aa:
fb:0a:5c:73:a4:63:3e:60:1f:ee:e1:bc:85:af:82:
4a:2c:af:af:d7:c3:80:97:f3:30:3a:43:50:6e:56:
d9:1f:96:2d:08:5e:fb:d2:12:f1:51:47:aa:94:fb:
78:fc:07:94:5b:7b:87:ed:11:c7:79:1e:ba:cf:44:
ad:8d:3c:e6:31:47:bc:6c:e2:ba:1b:a1:e1:f1:84:
d0:4c:fa:f4:b4:f4:66:e8:de:78:d6:9d:d8:61:2e:
19:04:91:4d:6b:a5:a0:d5:53:c8:5c:b4:84:86:f6:
7f:a7:c0:b0:60:46:6d:6f:6e:4a:35:bc:2f:88:48:
3e:99:94:80:be:4b:0d:9f:44:bf:aa:7d:fc:ca:cd:
21:37:94:c2:42:22:f8:56:8c:dc:d6:2b:7f:d5:f1:
d8:c2:36:fd:fa:e5:ed:94:e5:da:e1:b2:5b:cb:a1:
db:8b:1d:ea:f3:28:6b:0d:5a:ac:8f:91:23:f9:9c:
c7:2b:c0:0c:fe:6a:02:d9:c3:46:15:c2:3e:06:41:
3c:8d:2c:16:95:f8:30:05:63:f7:df:95:bf:16:a1:
4a:e6:c1:df:2c:5c:6b:c0:c3:16:7f:1c:6c:17:d9:
30:15
publicExponent: 65537 (0x10001)
privateExponent:
3d:34:f8:7e:79:28:95:7e:fd:43:f6:0c:03:c0:1d:
bb:d8:d9:d2:b5:32:53:6d:c9:b0:08:e5:60:5e:19:
3d:63:d7:34:38:aa:56:d5:d5:b5:f5:ea:61:d0:90:
f1:4b:c8:2a:66:0f:42:5a:28:b3:67:5e:e8:c8:a2:
c4:7d:84:3b:76:87:a4:96:84:6b:f0:f9:58:1e:06:
9d:c5:8c:6e:d9:1c:a5:5b:54:c2:32:18:32:91:1e:
fa:30:bc:e6:56:84:a1:ec:5a:7f:13:44:79:3e:67:
5f:1f:55:77:91:a6:77:ea:e9:74:f7:35:49:40:f6:
97:8d:f3:ac:a8:48:65:ae:8e:84:34:16:d8:e8:7d:
71:b2:30:29:df:fd:db:ff:8a:0f:68:af:d5:76:48:
15:ec:78:14:51:1b:13:de:45:d0:73:7d:cd:32:9a:
0c:08:3f:1e:2a:67:c4:db:51:b8:74:e2:1f:ba:a7:
86:6c:9f:7f:9d:49:75:5a:54:47:3d:01:e6:64:83:
7d:6b:d9:52:0a:d8:f3:a7:1a:28:61:f2:01:9b:32:
e2:cf:99:2b:3a:35:f1:21:88:f8:37:c7:80:80:69:
2e:2b:05:9b:00:c8:49:a9:08:a9:bf:d3:74:e0:0c:
18:13:35:74:e9:03:d6:6b:6b:09:bd:b3:9c:b9:04:
c1
prime1:
00:e0:d6:d1:18:cd:60:b2:18:29:93:3f:7a:79:e3:
9b:59:f6:f6:52:74:3d:65:df:92:8f:2c:dc:fb:06:
ca:c1:e6:85:d7:2e:a8:1c:04:1d:07:e1:be:0a:64:
e4:75:5f:44:71:6b:a7:16:94:46:81:e0:65:b3:09:
3a:55:0e:a8:f0:d9:ee:9f:4e:b4:46:c9:9a:32:b7:
f4:63:9f:b7:e2:54:8c:6f:8f:52:a1:98:07:34:04:
da:56:38:02:f0:4b:54:48:c1:20:29:23:08:19:93:
69:4e:7a:a5:ab:e4:8a:c3:f5:85:37:82:fa:73:ca:
51:fa:f6:9d:4b:d9:ae:b7:eb
prime2:
00:da:bc:fa:d3:56:b9:6d:82:73:95:9f:b7:42:42:
4a:eb:5a:98:5c:9c:4d:f7:60:1b:46:1b:6b:87:a5:
b3:8b:ce:a4:fe:2b:ee:65:89:5c:85:22:e0:71:62:
cf:2a:36:ac:aa:1d:d3:66:29:c4:dc:dc:5a:d8:6d:
ce:52:9a:ea:b4:12:c6:24:79:d2:50:08:27:e1:a5:
3d:50:01:5a:fe:1e:86:c5:e1:d7:34:24:d3:00:84:
fa:45:ab:20:69:17:9d:c7:16:8a:04:85:e3:4b:df:
08:5d:71:63:74:d4:78:fd:ea:c5:9c:61:68:55:bc:
f9:3b:0d:96:80:a1:45:b7:ff
exponent1:
19:ce:4e:1d:8c:a5:06:8b:e3:69:b5:25:77:8b:fa:
2e:af:3b:c2:66:f9:0d:12:46:1e:0c:c6:28:41:b5:
4f:e0:07:88:95:20:52:66:de:76:23:20:ce:cc:99:
b4:27:05:12:07:8b:1b:fa:54:c5:5f:5e:0c:d8:88:
4b:6e:ed:51:07:92:6d:d2:78:ba:8f:35:15:91:2b:
89:ab:b1:4d:56:ea:ef:7b:01:be:ee:56:15:50:61:
46:f8:12:ce:45:b7:1c:ca:9d:c8:5a:ee:f9:10:84:
4b:af:a4:08:40:a8:f4:a8:df:6b:69:ab:19:53:25:
69:aa:98:8f:36:22:e9:95
exponent2:
68:45:57:e8:30:da:39:da:ca:d0:93:8f:5f:75:8c:
93:3e:df:8c:9e:32:08:6f:76:f0:e7:97:4d:d5:6e:
8e:81:d6:63:17:7c:10:48:f7:a2:bb:aa:74:42:9e:
f0:c7:99:6d:8a:c4:40:5a:3e:ee:ed:d8:1c:7d:d3:
b1:cb:09:81:07:c6:0e:93:47:ef:40:c4:0a:2b:a3:
db:a4:99:c4:b3:b6:99:53:fc:2b:6e:36:6b:73:f8:
7e:07:82:6e:b6:84:4e:e8:6e:a8:93:4e:73:d7:80:
fc:52:56:0f:d6:4d:4a:f5:84:77:f4:73:31:13:e1:
57:06:36:2d:61:33:83:ef
coefficient:
00:99:64:d8:95:ad:72:3b:f0:a9:4d:d5:94:72:e3:
5e:bd:17:42:1a:65:c9:1b:bb:eb:e8:09:1a:f8:c6:
93:ee:9d:1d:39:b0:4f:35:70:a6:c3:0c:1f:45:fa:
4b:e3:07:d3:00:6d:20:c7:d9:07:7f:2f:11:25:81:
45:52:21:be:c6:39:a4:42:3d:a8:29:22:a4:80:69:
0f:b6:aa:39:c5:9d:35:81:8b:36:20:f4:93:0c:2c:
4e:25:95:e9:02:5e:ed:97:6d:84:70:97:11:78:26:
4f:f6:76:7b:f2:b9:3c:08:59:6c:44:50:16:f0:41:
51:16:0a:b4:74:92:f3:3c:2c
CSRのレビュー
次の例は、署名のためにCAに提出する前にCSRを確認する方法を示しています。
$ openssl req -text -noout -in example.com.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = DE, ST = EXAMPLE-STATE, L = Example City, O = Example Ltd, OU = IT, CN = example.com, emailAddress = [email protected]
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:c0:1c:e8:1c:12:86:c0:56:8b:50:dc:b0:79:c5:
f3:c9:bd:f5:f0:e2:0c:44:a9:0f:dc:ea:e1:50:aa:
fb:0a:5c:73:a4:63:3e:60:1f:ee:e1:bc:85:af:82:
4a:2c:af:af:d7:c3:80:97:f3:30:3a:43:50:6e:56:
d9:1f:96:2d:08:5e:fb:d2:12:f1:51:47:aa:94:fb:
78:fc:07:94:5b:7b:87:ed:11:c7:79:1e:ba:cf:44:
ad:8d:3c:e6:31:47:bc:6c:e2:ba:1b:a1:e1:f1:84:
d0:4c:fa:f4:b4:f4:66:e8:de:78:d6:9d:d8:61:2e:
19:04:91:4d:6b:a5:a0:d5:53:c8:5c:b4:84:86:f6:
7f:a7:c0:b0:60:46:6d:6f:6e:4a:35:bc:2f:88:48:
3e:99:94:80:be:4b:0d:9f:44:bf:aa:7d:fc:ca:cd:
21:37:94:c2:42:22:f8:56:8c:dc:d6:2b:7f:d5:f1:
d8:c2:36:fd:fa:e5:ed:94:e5:da:e1:b2:5b:cb:a1:
db:8b:1d:ea:f3:28:6b:0d:5a:ac:8f:91:23:f9:9c:
c7:2b:c0:0c:fe:6a:02:d9:c3:46:15:c2:3e:06:41:
3c:8d:2c:16:95:f8:30:05:63:f7:df:95:bf:16:a1:
4a:e6:c1:df:2c:5c:6b:c0:c3:16:7f:1c:6c:17:d9:
30:15
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: sha256WithRSAEncryption
03:48:10:27:a1:31:45:52:98:64:ec:49:cc:44:cd:f8:a0:58:
38:b7:3a:06:91:5e:3a:78:b2:e7:52:5b:b4:70:b9:a0:83:3b:
b0:f8:10:60:d3:f6:71:de:f5:63:aa:ee:f0:b9:da:fd:6e:0f:
ae:d2:f3:47:73:45:23:b8:09:94:e4:d5:61:c1:be:16:1c:16:
47:c3:92:db:6b:a5:8d:29:52:f3:62:80:b8:67:37:94:d4:cc:
96:4d:88:7b:3b:be:a6:67:39:97:56:9a:69:a2:d7:0a:e6:e5:
39:a2:30:e1:8a:26:b1:91:0b:aa:5a:5b:24:de:dc:5d:7f:fa:
89:ff:51:7f:a4:59:c7:47:27:53:d2:13:1f:25:00:58:a3:b1:
4b:21:af:99:b8:71:32:b2:3a:14:9a:8a:34:6a:b2:c9:ca:ec:
a6:95:66:16:14:cc:d5:fd:db:34:af:87:22:f4:0b:54:7d:45:
1b:b7:72:60:71:58:59:fa:1d:0a:40:d7:f6:e8:3f:7a:73:d0:
be:e6:fe:4f:9d:5d:a9:56:ce:2d:23:36:34:f0:74:0a:12:66:
d6:a8:ac:93:59:3a:31:c0:80:fa:42:2f:dd:36:a8:43:c2:de:
c1:50:de:20:e2:d3:56:d7:02:11:3d:6e:fa:9c:72:86:b2:04:
d1:24:54:6a
複数のドメイン名を含むCSRの作成
次のようなさまざまなドメイン名でアプリケーションにアクセスできる場合があります。
- example.com
- www.example.com
- app.example.com
3つのドメイン名すべてを含むCSRを作成するには、構成ファイルを使用できます。たとえば、お気に入りのテキストエディタを使用して、次のコンテンツを含むファイルを作成します。
[ req ]
default_bits = 2048
default_keyfile = test_privatekey.pem
distinguished_name = req_distinguished_name
encrypt_key = no
prompt = no
string_mask = nombstr
req_extensions = v3_req
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:example.com, DNS:www.example.com, DNS: app.example.com
[ req_distinguished_name ]
countryName = DE
stateOrProvinceName = EXAMPLE-STATE
localityName = Example City
0.organizationName = Example Ltd.
organizationalUnitName = IT
commonName = example.com
最初のセクション[req] 2048ビットの秘密RSAキーが生成され、test_privatekey.pem
として保存されることを指定します 。また、このセクションには、この記事の前のセクション( [req_distinguished_name] のセクション)でインタラクティブに入力したビットの検索に関する情報が含まれています。 。 [v3_req]で 、 keyUsageにはいくつかの制約があります しかし、もっと重要なのは、この記事では、パラメーター subjectAltName ここで、共通名とすべての追加名が指定されています。 openssl.cnf
として保存します 次のコマンドで実行して、秘密鍵とCSRを作成します。
$ openssl req -batch -new -config openssl.cnf -out example.com.csr
Generating a RSA private key
.......................................................................+++++
...................................+++++
writing new private key to 'test_privatekey.pem'
-----
$ ls
example.com.csr openssl.cnf test_privatekey.pem
この例では、パスフレーズは秘密鍵を保護しないことに注意してください。これは、Webサーバーで読み取れるようにする場合に便利です。しかし、それを監視し、安全に保管してください。
CSRはexample.com.csr
に保存されます 以前と同じようにコンテンツを確認できます:
$ openssl req -text -noout -in example.com.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = DE, ST = EXAMPLE-STATE, L = Example City, O = Example Ltd., OU = IT, CN = example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:b4:ce:85:79:cc:74:f4:36:13:fe:c0:ff:57:6a:
31:0f:68:80:17:eb:f4:0f:b5:3f:56:dd:34:c8:4d:
a8:3f:f0:5f:fa:0a:f8:94:4d:3b:92:59:05:c2:c3:
8f:54:40:5d:db:d7:d8:f8:e5:a7:f4:a4:d5:77:18:
cc:dc:21:37:f1:72:23:28:16:f2:fe:03:67:a1:e3:
22:3d:85:80:0b:dd:e2:44:95:97:5f:12:3d:ab:f2:
8c:0d:71:c3:8a:76:4f:d1:5b:89:5b:14:c4:e3:33:
2e:5f:5a:1d:46:e0:4b:7b:f0:cf:ba:a5:ab:35:7f:
57:70:b0:97:0d:47:d8:3e:0c:ef:15:45:2d:c2:df:
d7:3b:91:6f:1b:2e:96:e3:a5:3f:32:32:ad:67:57:
5b:72:09:35:a8:bc:e6:78:07:c5:65:ea:f7:29:3d:
77:2e:3c:6b:e8:94:49:2b:28:de:9c:11:92:bf:05:
b8:ab:05:d1:51:78:82:13:58:f4:79:4f:ad:f4:ec:
42:8d:74:12:22:48:c0:6f:87:95:45:2d:8e:6d:2f:
78:ab:d9:41:c5:56:bb:ed:b9:5d:23:d9:6e:f9:80:
88:3d:2b:f2:f9:a3:45:98:15:99:19:c0:65:22:df:
8a:b2:e1:71:9e:7f:42:8d:6f:ce:9a:81:18:a4:22:
b3:85
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Key Encipherment, Data Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com, DNS:app.example.com
Signature Algorithm: sha256WithRSAEncryption
96:4b:00:08:e3:44:20:fe:b4:45:01:ac:e6:28:27:f9:22:e4:
da:ea:99:45:d3:dd:44:04:b6:c8:29:2f:a9:5d:f2:bb:92:6e:
86:a4:c6:22:fb:1b:c0:89:29:bc:00:b4:69:bc:cf:29:01:e7:
b3:d2:b6:f5:cc:95:b1:d1:a2:f6:8d:b4:40:a4:94:4f:7f:1d:
cc:aa:d4:9c:7e:6d:53:2d:eb:2a:7a:2f:0e:b8:c0:4d:13:71:
19:dd:30:2c:d6:ed:03:a9:70:ff:90:71:82:6a:4e:64:93:1e:
60:c4:f3:cc:16:07:81:47:63:e9:4a:f5:79:99:b8:5e:e0:e1:
bb:68:8b:45:08:91:4a:d6:dc:70:e6:b4:75:11:77:a6:3d:54:
64:55:50:9f:27:1d:fe:d2:96:19:7b:d2:10:a5:4b:ef:33:6e:
9d:31:5b:a3:4e:89:11:b6:09:c6:07:d6:c9:8e:e7:88:c9:be:
9a:78:3e:2c:82:76:08:20:e0:1a:e8:9e:fd:7a:b0:3c:6b:5c:
60:a1:77:98:7c:dd:98:93:c6:d8:d3:f4:de:9a:8f:5a:f3:10:
d1:df:18:a7:7d:bc:2c:50:4e:b9:bf:90:62:57:46:2f:39:b9:
82:1d:5a:1c:bc:92:9f:5b:7e:e0:ac:7d:29:63:fb:04:e9:71:
68:53:33:90
x509v3サブジェクト代替名のセクションを認識しておく必要があります 必要なすべてのドメイン名が含まれています。
証明書に必要なドメイン名が1つ以上であるかどうかに関係なく、必要なCSRを生成する方法がわかりました。深く理解するには、上記で推奨した本を参照することをお勧めします。
インターネットPKI
信頼できるCAによる署名を取得する準備ができたCSRができたので、次はインターネットPKIを調べます。基本的な概要は次のとおりです。詳細については、RFC5280を参照してください。
インターネットPKIには、次の役割があります。
サブスクライバー -TLS/SSLで保護されたサービスを提供したい人。おそらくあなたと私です。
認証局(CA) -サブスクライバーまたはそのドメインのIDを確認し、Webサーバーにインストールできる証明書を発行します。また、取り消された証明書に関する情報も提供します。
依拠当事者 -これは、WebブラウザまたはWebサーバーから送信された証明書を検証しようとする他の種類のクライアントである可能性があります。いわゆるトラストアンカーは、証明書を検証するために使用されます。トラストアンカーは、完全に信頼され、ブラウザの信頼できるCAストアに保持される証明書です。
通常、次のワークフローは、WebブラウザがWebサーバーからの証明書を検証する前に完了します。
- OpenSSLを使用して秘密鍵を生成する
- OpenSSLを使用してCSRを作成する
- 署名のためにCSRをCAに送信する
- CAから署名付き証明書を受け取る
- Webサーバーに秘密鍵と証明書をインストールします
- ユーザー/顧客はサイト/アプリの使用を開始できます
公開鍵暗号化についてすでに知っていることを覚えておいてください。秘密鍵を使用してメッセージに署名し、対応する公開鍵を使用して署名を検証できます。 CAが公開鍵に署名して証明書を発行すると、非常によく似たことが起こります。
証明書自体は、あなたまたはあなたの組織に関するいくつかの情報を含むデータ構造です。これには、ドメイン名、公開鍵、証明書を発行したCAの名前、およびCAの署名が含まれています。例を挙げると、私の個人ブログで現在使用されている証明書を示し、その最も重要なセクションについて説明します(概要をわかりやすくするために短縮されています)。
$ echo "" |openssl s_client -connect www.my-it-brain.de:443 | openssl x509 -text -noout
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = www.my-it-brain.de
verify return:1
DONE
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:50:26:2d:14:91:0f:23:32:af:19:d8:38:a6:00:cf:b4:d6
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = Let's Encrypt, CN = R3
Validity
Not Before: Feb 16 22:34:35 2021 GMT
Not After : May 17 22:34:35 2021 GMT
Subject: CN = www.my-it-brain.de
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
[...]
Exponent: 65537 (0x10001)
X509v3 extensions:
[...]
「証明書:」の後の部分 「には、シリアル番号、公開鍵の署名に使用される署名アルゴリズム、発行者の名前、この証明書が有効である期間、ドメイン名、公開鍵などの情報が含まれています。ただし、最初の行は次のようになります。署名パスが表示されます:
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = www.my-it-brain.de
verify return:1
DONE
あなたが見るのは信頼の鎖です。この証明書(FQDN www.my-it-brain.de
に関連付けられた公開鍵)が表示されていることがわかります。 ) Let's Encrypt R3によって署名されました (R3は証明書の名前です)これは、Digital Signature TrustCo.によって署名されました。DSTルートCAX3(ここではDSTルートCA X3が証明書の名前です)。
しかし、ブラウザはこれらの証明書の1つを信頼するかどうかをどのように知るのでしょうか。 DSTルートCAX3証明書は、ブラウザのトラストアンカーに保存されます。次の画像を参照してください。これは、ブラウザのトラストアンカーを示しています。
このエントリは、DSTルートCAX3によって署名されたすべての証明書を信頼するようにブラウザに指示します。 www.my-it-brain.de
のリーフ証明書まで信頼の鎖が構築されています 。次の図は、信頼の鎖がどのように機能するかを示しています。
画像ソース:Yuhkih、CCBY-SA4.0。
エンドエンティティ証明書とブラウザストアのトラストアンカーの間に、複数の中間証明書が存在する可能性があることに注意してください。ブラウザがチェーンに沿った各証明書を検証して、リーフ証明書を検証できることが重要です。ブラウザが中間証明書の1つを見逃すと、証明書の検証が失敗するため、これは注意することが重要です。
通常、CAから、証明書と関連するすべての中間体を含むフルチェーン証明書を、ブラウザのトラストアンカーにあるルート証明書まで取得します。ユーザーがサイトにアクセスして素晴らしいエクスペリエンスを提供できるように、完全なチェーンを提供するようにWebサーバーを構成することをお勧めします。
[セキュリティについて考えていますか?ハイブリッドクラウドのセキュリティを強化し、ビジネスを保護するためのこの無料ガイドをご覧ください。 ]
まとめ
このシリーズの最初の記事では、暗号化の概念の基本を学びました。この記事では、TLS / SSLとOpenSSLツールの概要を学び、署名のためにCAに送信できる秘密鍵とCSRを作成する方法を学びました。また、インターネットPKIは信頼の鎖とともに導入され、検証プロセスがどのように機能するかを示しています。
このシリーズの次の記事では、インターネットPKIの問題と、それらについて何ができるかを見ていきます。
*もちろん、別の理由があります。TLS/ SSL暗号化を使用していない場合、ウェブサイトの検索結果のランキングが低くなります。