====== OpenSSL によるプライベート CA の構築 ====== ===== パッケージインストール =====
$ sudo dnf install openssl
メタデータの期限切れの最終確認: 0:26:53 時間前の 2023年05月15日 08時55分29秒 に実施しました。
依存関係が解決しました。
==============================================================================================================
 パッケージ              アーキテクチャー       バージョン                       リポジトリー           サイズ
==============================================================================================================
インストール:
 openssl                 x86_64                 1:3.0.8-2.fc38                   fedora                 1.0 M

トランザクションの概要
==============================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 1.0 M
インストール後のサイズ: 1.6 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
openssl-3.0.8-2.fc38.x86_64.rpm                                               629 kB/s | 1.0 MB     00:01    
--------------------------------------------------------------------------------------------------------------
合計                                                                          395 kB/s | 1.0 MB     00:02     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                      1/1 
  インストール中   : openssl-1:3.0.8-2.fc38.x86_64                                                        1/1 
  scriptletの実行中: openssl-1:3.0.8-2.fc38.x86_64                                                        1/1 
  検証             : openssl-1:3.0.8-2.fc38.x86_64                                                        1/1 

インストール済み:
  openssl-1:3.0.8-2.fc38.x86_64                                                                               

完了しました!
===== ディレクトリとファイルの作成 ===== $ sudo mkdir -p /etc/pki/mgcCA/{certs,client,crl,newcerts,private} $ sudo touch /etc/pki/mgcCA/{index.txt,index.txt.attr,serial} $ sudo bash -c "echo '01' > /etc/pki/mgcCA/serial" ==== CA のディレクトリとファイル ==== $ ll /etc/pki/mgcCA/ drwxr-xr-x 1 root root 0 2月 11 11:26 certs drwxr-xr-x 1 root root 0 2月 11 11:26 client drwxr-xr-x 1 root root 0 2月 11 11:26 crl -rw-r--r-- 1 root root 0 2月 11 11:27 index.txt -rw-r--r-- 1 root root 0 2月 11 11:27 index.txt.attr drwxr-xr-x 1 root root 0 2月 11 11:26 newcerts drwxr-xr-x 1 root root 0 2月 11 11:26 private -rw-r--r-- 1 root root 3 2月 11 11:27 serial ^ ディレクトリ ^ 説明 ^ ファイル ^ 説明 ^ | certs | 証明書保管用 | index.txt | newcerts ディレクトリ内に保管される証明書の\\ 通番(nn)と識別名DN(Distinguished Name)との対応表 | | client | クライアント CSR、証明書、秘密鍵、PKCS#12 フォーマットのファイルのバックアップ用 | index.txt.attr | index.txtにて管理する通番に重複を許すかどうかの設定\\ unique_subject = yes : 重複を許さない(デフォルト)\\ unique_subject = no : 重複を許す | | crl | 失効リスト(Certificate Revocation List)保管用 | serial | 次に発行する証明書の通番(nn) | | newcerts | 新規に発行した証明書保管用 | | | | private | CAの秘密鍵保管用 | | | ===== デフォルトのユーザー情報を設定 ===== 証明書作成の際に入力の手間を省くために、デフォルト値を設定しておく。\\ \\ 設定ファイルをコピーする。 $ sudo cp /etc/pki/tls/openssl.cnf /etc/pki/mgcCA/ \\ 設定ファイルを編集する。 $ sudo vi /etc/pki/mgcCA/openssl.cnf [ CA_default ] dir = /etc/pki/mgcCA # 認証局ディレクトリパス default_days = 36500 # 証明書の有効期限は100年 [ req ] default_bits = 2048 default_md = sha256 [ req_distinguished_name ] countryName_default = JP # 国コード stateOrProvinceName_default = Hokkaido Pref. # 都道府県 localityName_default = Sapporo City # 市町村区 # 会社名 or ドメイン名(行末の#がコメントとして扱われない、' が無視されるので注意) 0.organizationName_default = Monster's Garage Co.,Ltd. organizationalUnitName_default = - # 組織部門名 emailAddress_default = domain-admin@monsters-g.com # 管理者メールアドレス openssl.cnf をコピーして、認証局(ca)、サーバー(server)、クライアント(client)用の設定ファイルを準備する。 $ sudo bash -c 'd=/etc/pki/mgcCA; for f in $d/openssl-mgc-{ca,server,client}.cnf; do cp $d/openssl.cnf $f; done' ===== プライベート認証局 CA の秘密鍵と証明書の作成 ===== ==== 作成ファイル ==== ^ ファイル ^ 説明 ^ | private/cakey.pem | CA 秘密鍵 | | cacert.pem | CA 証明書 | | mgc_ca_cert.der | CA 証明書(DER形式) | ==== CA の秘密鍵と証明書の作成 ==== openssl-mgc-ca.cnf(認証局用設定ファイル)を編集する。 $ sudo vi /etc/pki/mgcCA/openssl-mgc-ca.cnf [ usr_cert ] basicConstraints=CA:TRUE # CA証明書 [ v3_ca ] # nsCertType = sslCA, emailCA nsCertType = sslCA, emailCA # SSL認証局、電子メール認証局 CA の秘密鍵と証明書を作成する。 $ sudo openssl req -new -config /etc/pki/mgcCA/openssl-mgc-ca.cnf -x509 -days 36500 -keyout /etc/pki/mgcCA/private/cakey.pem -out /etc/pki/mgcCA/cacert.pem Generating a RSA private key .................................................+++++ ..................................................................................+++++ writing new private key to '/etc/pki/mgcCA/private/cakey.pem' 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) [JP]: # Enter を入力 State or Province Name (full name) [Hokkaido Pref.]: # Enter を入力 Locality Name (eg, city) [Sapporo City]: # Enter を入力 Organization Name (eg, company) [Monsters Garage Co.,Ltd.]:Monster's Garage Co.,Ltd. # 会社名 or ドメイン名を入力 Organizational Unit Name (eg, section) [-]: # Enter を入力 Common Name (eg, your name or your server's hostname) []:Monster's Garage CA # CA名称 or ホスト名を入力 Email Address [domain-admin@monsters-g.com]: # Enter を入力 CA証明書の確認。 $ openssl x509 -in /etc/pki/mgcCA/cacert.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 46:fa:04:8a:29:79:6e:68:cd:9f:45:54:be:42:5b:ef:4f:8f:54:4c Signature Algorithm: sha256WithRSAEncryption Issuer: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = Monster's Garage CA, emailAddress = domain-admin@monsters-g.com Validity Not Before: Feb 10 14:33:39 2019 GMT Not After : Jan 17 14:33:39 2119 GMT Subject: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = Monster's Garage CA, emailAddress = domain-admin@monsters-g.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:dd:7e:eb:e7:ee:3c:f9:d8:58:0c:03:70:a2:96: d6:97:7c:5a:31:6c:23:a8:93:b6:5b:21:99:31:21: ca:3c:0e:21:d6:5b:85:09:66:54:c1:ef:db:89:a8: f5:dc:8c:a2:5c:b2:b5:37:a1:69:80:1a:86:0d:92: 96:cb:22:47:a6:a6:ff:be:48:fc:f5:ac:02:bf:8c: 8a:0b:e0:84:32:f5:78:c1:67:bd:f6:5a:05:70:eb: 50:97:1b:19:8d:2a:62:59:30:9e:fe:cc:65:8f:94: a1:aa:8f:39:df:b4:be:46:73:0c:5e:94:df:6a:62: 82:ba:6b:74:66:db:80:7c:9c:9c:58:aa:6a:0f:f9: 04:47:c1:3f:e0:05:eb:31:da:f6:f0:a8:b7:48:e0: d8:16:42:17:86:49:36:d6:b1:72:ff:ba:18:08:ae: 01:71:41:b4:ba:e5:d7:ca:68:c4:64:0b:22:43:55: fc:b6:bb:43:39:d4:51:83:39:a4:40:37:00:0f:9f: 2b:dd:f0:48:1b:3c:67:c3:df:e6:89:11:fb:cd:37: c9:62:07:44:bb:e6:5f:7c:de:6f:5a:1e:61:b9:fa: 92:14:44:44:47:5b:8a:41:a8:d2:4a:02:18:a9:d2: cc:ed:a2:1b:f1:15:10:86:23:7d:bf:78:ee:fa:c0: bd:a3 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 75:0E:6F:10:D2:10:CF:F2:CF:6E:20:12:C7:AE:25:70:00:F0:CD:65 X509v3 Authority Key Identifier: keyid:75:0E:6F:10:D2:10:CF:F2:CF:6E:20:12:C7:AE:25:70:00:F0:CD:65 X509v3 Basic Constraints: critical CA:TRUE Netscape Cert Type: SSL CA, S/MIME CA Signature Algorithm: sha256WithRSAEncryption 15:19:19:52:db:b6:bb:54:fd:94:1c:58:2f:28:8c:53:81:8d: ed:b1:5d:0e:f1:fe:c6:ec:ae:88:ab:b6:e2:13:40:07:78:2f: 75:4b:ee:5f:77:a5:1f:55:b4:c3:25:fb:a6:02:3e:4d:3c:71: b6:2a:f9:d0:bf:75:dd:13:97:22:2b:b4:8a:aa:5c:c6:27:b7: af:4f:17:49:04:98:81:4b:55:14:3c:20:2c:86:74:75:47:d5: 59:34:09:ab:02:a5:22:97:bf:5f:d9:e1:84:e3:68:18:93:c9: fd:df:1b:02:c7:96:93:52:2e:f1:8b:a5:1d:e8:d6:32:52:62: 5f:1b:63:aa:a3:39:75:8e:82:1e:06:46:f4:a6:1b:b9:3f:db: 88:78:9f:db:4c:f0:5d:ef:62:1b:37:37:63:31:1d:54:44:ff: 04:a7:13:3b:82:af:e4:f2:46:de:ff:56:dc:d8:cc:86:7e:51: 5a:69:5a:17:2c:4c:ee:38:3b:3b:3f:f0:30:1f:d5:7b:4c:d0: 2e:27:3f:0d:cb:a7:0f:83:f9:18:68:b2:af:c9:9b:a0:ec:13: 80:13:26:0b:af:25:75:5a:71:fa:6b:20:36:d7:da:09:b3:4c: de:60:68:02:24:43:59:cf:8a:0f:26:1f:71:de:a4:f4:78:44: 90:bb:e5:7d CA のカレントディレクトリの private/ に CA 秘密鍵とカレントディレクトリにCA 証明書が作成される。 $ ll /etc/pki/mgcCA/private/ -rw------- 1 root root 1854 2月 11 11:40 cakey.pem # CA 秘密鍵 $ ll /etc/pki/mgcCA/ -rw-r--r-- 1 root root 1586 2月 11 11:40 cacert.pem # CA 証明書 ==== CA 証明書を DER 形式へ変換 ==== DER(Distinguished Encoding Rules) 形式は Windows OS で証明書や秘密鍵をインポートするのに使えるフォーマットである。\\ ここでは PEM 形式の CA 証明書を DER 形式に変換する。\\ $ sudo openssl x509 -inform pem -outform der -in /etc/pki/mgcCA/cacert.pem -out /etc/pki/mgcCA/mgc_ca_cert.der CAのカレントディレクトリにCA 証明書(DER形式)が作成される。 $ ll /etc/pki/mgcCA/ -rw-r--r-- 1 root root 1126 2月 11 09:40 mgc_ca_cert.der # CA 証明書(DER形式) ===== サーバー証明書の作成 ===== ==== 作成ファイル ==== ^ ファイル ^ 説明 ^ | serverkey.pem | サーバー秘密鍵 | | serverreq.csr | サーバー CSR | | servercert.crt | サーバー証明書 | | serverkey-nopwd.pem | サーバー秘密鍵(パスフレーズなし) | | san.ext | SAN 追加設定ファイルを作成 | ==== サーバー CSR(Certificate Signing Request) の作成 ====  サーバー CSR は、パブリック認証局(Verisignなど)やプライベート認証局に対するサーバー証明書の署名要求である。\\  認証局に署名して貰うことによって、証明書として利用できるようになる。\\ \\ openssl-mgc-server.cnf(サーバー用設定ファイル)を編集する。\\ $ sudo vi /etc/pki/mgcCA/openssl-mgc-server.cnf [ usr_cert ] basicConstraints=CA:FALSE # CA証明書以外 nsCertType = server # サーバー証明書 \\ サーバー CSR(Certificate Signing Request) を作成する。\\ $ sudo openssl req -new -config /etc/pki/mgcCA/openssl-mgc-server.cnf \ -addext 'subjectAltName=DNS:localhost,DNS:*.tomoyan.net' \ -keyout /etc/pki/mgcCA/serverkey.pem -out /etc/pki/mgcCA/serverreq.csr Generating a RSA private key ...................................+++++ ......................................+++++ writing new private key to '/etc/pki/mgcCA/serverkey.pem' 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) [JP]: # Enter を入力 State or Province Name (full name) [Hokkaido Pref.]: # Enter を入力 Locality Name (eg, city) [Sapporo City]: # Enter を入力 Organization Name (eg, company) [Monsters Garage Co.,Ltd.]:Monster's Garage Co.,Ltd. # 会社名 or ドメイン名を入力 Organizational Unit Name (eg, section) [-]: # Enter を入力 Common Name (eg, your name or your server's hostname) []:tomoyan.net # Web サーバーで利用する場合はドメイン名を入力 Email Address [domain-admin@monsters-g.com]:domain-admin@tomoyan.net # 管理者メールアドレスを入力 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: # Enter を入力 An optional company name []: # Enter を入力 \\ CAのカレントディレクトリにサーバー秘密鍵とサーバー CSR(証明書署名要求)が作成される。 $ ll /etc/pki/mgcCA/ -rw------- 1 root root 1854 2月 10 23:57 serverkey.pem # サーバー秘密鍵 -rw-r--r-- 1 root root 1106 2月 11 00:03 serverreq.csr # サーバー CSR(証明書署名要求) **※サーバー CSR は認証局に渡して署名して貰うことで証明書として利用できるようになる。\\  秘密キーは証明書をサーバーで利用する際に必要になるので大事に保管しておくこと。**\\ \\ サーバー CSR の内容を確認する。 $ openssl req -in /etc/pki/mgcCA/serverreq.csr -text -noout Certificate Request: Data: Version: 1 (0x0) Subject: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = tomoyan.net, emailAddress = domain-admin@tomoyan.net Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ad:8b:53:f7:40:38:70:8b:cb:b1:12:e0:55:77: ~省略~ Exponent: 65537 (0x10001) Attributes: Requested Extensions: X509v3 Subject Alternative Name: DNS:localhost, DNS:*.tomoyan.net Signature Algorithm: sha256WithRSAEncryption 89:2e:52:e2:cd:cb:d5:77:6a:05:73:32:6d:67:bf:73:09:17: ~省略~ ==== プライベート認証局でサーバー CSR に署名する(サーバー証明書作成) ==== 証明書作成の手前で追加設定ファイルを作成する。\\ $ sudo vi /etc/pki/mgcCA/san.ext basicConstraints=CA:FALSE # CA証明書以外 nsCertType=server # サーバー証明書 nsComment="OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer subjectAltName=DNS:localhost,DNS:*.tomoyan.net サーバー CSR(Certificate Signing Request) に認証局で署名する。\\ $ sudo openssl ca -config /etc/pki/mgcCA/openssl-mgc-server.cnf -keyfile /etc/pki/mgcCA/private/cakey.pem -in /etc/pki/mgcCA/serverreq.csr -out /etc/pki/mgcCA/servercert.crt -extfile /etc/pki/mgcCA/san.ext Using configuration from /etc/pki/mgcCA/openssl-mgc-server.cnf Enter pass phrase for /etc/pki/mgcCA/private/cakey.pem: # プライベート認証局のパスフレーズを入力 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 10 (0xa) Validity Not Before: Feb 16 11:33:35 2019 GMT Not After : Jan 23 11:33:35 2119 GMT Subject: countryName = JP stateOrProvinceName = Hokkaido Pref. organizationName = Monster's Garage Co.,Ltd. organizationalUnitName = - commonName = localhost, *.tomoyan.net emailAddress = domain-admin@tomoyan.net X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4B:2D:69:69:2E:6C:6B:9B:33:CE:68:52:87:CE:A9:B5:42:6E:C5:AA X509v3 Authority Key Identifier: keyid:F1:11:89:F3:AC:9E:C5:F4:01:B9:1A:96:17:A8:67:2D:13:6D:80:03 X509v3 Subject Alternative Name: DNS:localhost, DNS:*.tomoyan.net Certificate is to be certified until Jan 23 11:33:35 2119 GMT (36500 days) Sign the certificate? [y/n]:y # y と Enter を入力 1 out of 1 certificate requests certified, commit? [y/n]y # y と Enter を入力 Write out database with 1 new entries Data Base Updated カレントディレクトリにサーバー証明書が作成される。 $ ll /etc/pki/mgcCA/ -rw-r--r-- 1 root root 4890 2月 11 00:46 servercert.crt # サーバー証明書 ==== サーバー証明書の内容確認 ==== $ sudo openssl x509 -in /etc/pki/mgcCA/servercert.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 10 (0xa) Signature Algorithm: sha256WithRSAEncryption Issuer: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = Monster's Garage CA, emailAddress = domain-admin@monsters-g.com Validity Not Before: Feb 16 11:33:35 2019 GMT Not After : Jan 23 11:33:35 2119 GMT Subject: C = JP, ST = Hokkaido Pref., O = "Monster's Garage Co.,Ltd.", OU = -, CN = "localhost, *.tomoyan.net", emailAddress = domain-admin@tomoyan.net Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:dc:a3:7e:df:9e:aa:17:f7:0e:a0:40:4c:24:f1: 91:4e:ce:7f:2b:da:91:78:f9:b4:67:10:fe:63:6f: 〜省略〜 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Server Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 4B:2D:69:69:2E:6C:6B:9B:33:CE:68:52:87:CE:A9:B5:42:6E:C5:AA X509v3 Authority Key Identifier: keyid:F1:11:89:F3:AC:9E:C5:F4:01:B9:1A:96:17:A8:67:2D:13:6D:80:03 X509v3 Subject Alternative Name: DNS:localhost, DNS:*.tomoyan.net Signature Algorithm: sha256WithRSAEncryption ba:ca:e4:01:53:cc:16:08:d7:81:cd:0e:86:ec:79:ce:0f:0d: 16:e4:b4:f0:df:6b:a8:b1:1d:bf:a2:f7:41:89:d3:18:4a:eb: 〜省略〜 ==== サーバーで利用する秘密鍵のパスフレーズ除去 ====  秘密キーを Web サーバーなどで利用する際にパスフレーズを聞かれないようにするには、サーバー証明書の秘密キーのパスフレーズを除去しておく。\\ 秘密キーのパスフレーズを除去する。 $ sudo openssl rsa -in /etc/pki/mgcCA/serverkey.pem -out /etc/pki/mgcCA/serverkey-nopwd.pem Enter pass phrase for /etc/pki/mgcCA/serverkey.pem: # 秘密キーのパスフレーズを入力 writing RSA key カレントディレクトリにパスフレーズを除去した秘密キーが作成される。 $ ll /etc/pki/mgcCA/ -rw------- 1 root root 1675 2月 11 01:08 serverkey-nopwd.pem # 秘密鍵(パスフレーズなし) ==== サーバー CSR、証明書、秘密鍵のファイルのバックアップ ==== 必要に応じて作成したサーバー CSR、証明書、秘密鍵のファイルをわかりやすいように認証局(CA)の管理下のディレクトリにバックアップしておく。\\ $ sudo mv /etc/pki/mgcCA/serverreq.csr /etc/pki/mgcCA/certs/www.tomoyan.net.csr $ sudo mv /etc/pki/mgcCA/servercert.crt /etc/pki/mgcCA/certs/www.tomoyan.net.crt $ sudo mv /etc/pki/mgcCA/serverkey.pem /etc/pki/mgcCA/certs/www.tomoyan.net.pem $ sudo mv /etc/pki/mgcCA/serverkey-nopwd.pem /etc/pki/mgcCA/certs/www.tomoyan.net-nopwd.pem $ sudo mv /etc/pki/mgcCA/san.ext /etc/pki/mgcCA/certs/www.tomoyan.net_san.ext ===== クライアント証明書の作成 ===== ==== 作成ファイル ==== ^ ファイル ^ 説明 ^ | clientkey.pem | クライアント秘密鍵 | | clientreq.csr | クライアント CSR | | clientcert.crt | クライアント証明書 | | tomoyan-client.p12 | 個人情報交換ファイル | ==== クライアント CSR(Certificate Signing Request) の作成 ====  クライアント CSR は、パブリック認証局(Verisignなど)やプライベート認証局に対するクライアント証明書の署名要求である。\\  認証局に署名して貰うことによって、クライアント証明書として利用できるようになる。\\ \\ openssl-mgc-client.cnf(クライアント用設定ファイル)を編集する。\\ $ sudo vi /etc/pki/mgcCA/openssl-mgc-client.cnf [ usr_cert ] basicConstraints=CA:FALSE # CA証明書以外 nsCertType = client, email, objsign # クライアント、電子メール、オブジェクトサイン証明書 \\ クライアント CSR(Certificate Signing Request) を作成する。\\ $ sudo openssl req -new -config /etc/pki/mgcCA/openssl-mgc-client.cnf -keyout /etc/pki/mgcCA/clientkey.pem -out /etc/pki/mgcCA/clientreq.csr **注意: 標準では Country Name, State of Province Name, Organization name は署名する CA のものと同一でなければならない。** Generating a RSA private key ...+++++ ........+++++ writing new private key to '/etc/pki/mgcCA/clientkey.pem' 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) [JP]: # Enter を入力 State or Province Name (full name) [Hokkaido Pref.]: # Enter を入力 Locality Name (eg, city) [Sapporo City]: # Enter を入力 Organization Name (eg, company) [Monsters Garage Co.,Ltd.]:Monster's Garage Co.,Ltd. # 会社名 or ドメイン名を入力 Organizational Unit Name (eg, section) [-]: # Enter を入力 Common Name (eg, your name or your server's hostname) []:TomoYan # 利用者名を入力 Email Address [domain-admin@monsters-g.com]:tomoyan@tomoyan.net # 利用者メールアドレスを入力 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: # Enter を入力 An optional company name []: # Enter を入力 \\ CAのカレントディレクトリにクライアント秘密鍵とクライアント CSR(証明書署名要求)が作成される。 $ ll /etc/pki/mgcCA/ -rw------- 1 root root 1854 2月 11 01:35 clientkey.pem # クライアント秘密鍵 -rw-r--r-- 1 root root 1086 2月 11 01:42 clientreq.csr # クライアント CSR(証明書署名要求) **※クライアント CSR は認証局に渡して署名して貰うことで証明書として利用できるようになる。\\  秘密鍵は証明書をクライアントで利用する際に必要になるので大事に保管しておくこと。**\\ \\ クライアント CSR の内容を確認する。 $ openssl req -in /etc/pki/mgcCA/clientreq.csr -text -noout Certificate Request: Data: Version: 1 (0x0) Subject: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = TomoYan, emailAddress = tomoyan@tomoyan.net Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:cf:38:92:c9:c1:7e:68:1d:27:64:d5:9c:94:a6: 98:eb:b5:90:4e:eb:ee:d4:5e:6f:5d:01:79:3b:57: f9:96:33:94:30:46:f4:bc:b1:5b:50:95:a0:28:eb: ee:0a:4a:aa:be:7d:b9:58:8f:e5:e5:c2:0e:58:6c: ec:0e:21:a9:5d:1f:34:1f:d7:e1:0a:42:8c:a0:63: 4a:ee:fd:94:f3:36:d6:1f:bd:4b:43:82:45:a5:ea: 32:09:11:0c:48:cf:1c:1d:b6:e8:5b:99:d6:30:ce: 77:d6:b3:2f:0c:04:ec:1d:cc:1a:27:c1:ef:07:6e: 3f:f4:7d:0e:c3:33:a6:db:73:6c:34:32:df:6d:57: f3:27:c8:43:c3:01:d3:62:60:66:c7:4e:99:86:a5: 9b:96:b3:53:75:b8:58:a7:d8:9c:b5:83:80:39:0a: 2e:4b:b8:91:ea:b3:d7:20:45:4d:77:61:9f:e4:6d: 46:c6:36:12:c7:e0:54:a2:fb:60:24:57:d5:a1:e3: e4:83:92:6e:46:f6:1f:68:43:e5:29:93:be:5c:c9: 4a:16:c3:59:b3:96:3d:e8:aa:c6:fd:33:1f:54:7a: 14:8c:74:0f:32:c2:31:57:56:e7:76:c4:bc:e9:f1: 1c:93:99:88:6a:0b:46:53:e0:34:21:ad:37:58:80: e3:39 Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: sha256WithRSAEncryption 7b:ba:9b:c7:e4:2a:ff:89:fa:36:49:68:aa:22:9e:f6:e1:9e: ~省略~ ==== プライベート認証局でクライアント CSR に署名する(クライアント証明書作成) ==== クライアント CSR(Certificate Signing Request) に認証局で署名する。\\ $ sudo openssl ca -config /etc/pki/mgcCA/openssl-mgc-client.cnf -keyfile /etc/pki/mgcCA/private/cakey.pem -in /etc/pki/mgcCA/clientreq.csr -out /etc/pki/mgcCA/clientcert.crt Using configuration from /etc/pki/mgcCA/openssl-mgc-client.cnf Enter pass phrase for /etc/pki/mgcCA/private/cakey.pem: # プライベート認証局のパスフレーズを入力 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 3 (0x3) Validity Not Before: Feb 10 17:03:11 2019 GMT Not After : Jan 17 17:03:11 2119 GMT Subject: countryName = JP stateOrProvinceName = Hokkaido Pref. organizationName = Monster's Garage Co.,Ltd. organizationalUnitName = - commonName = TomoYan emailAddress = tomoyan@tomoyan.net X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Client, S/MIME, Object Signing Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: D8:60:5D:77:BF:C1:DA:DE:CC:94:00:0F:F8:29:5E:B0:58:3B:B3:1D X509v3 Authority Key Identifier: keyid:75:0E:6F:10:D2:10:CF:F2:CF:6E:20:12:C7:AE:25:70:00:F0:CD:65 Certificate is to be certified until Jan 17 17:03:11 2119 GMT (36500 days) Sign the certificate? [y/n]:y # y と Enter を入力 1 out of 1 certificate requests certified, commit? [y/n]y # y と Enter を入力 Write out database with 1 new entries Data Base Updated カレントディレクトリにクライアント証明書が作成される。 $ ll /etc/pki/mgcCA/ -rw-r--r-- 1 root root 4886 2月 11 02:03 clientcert.crt # クライアント証明書 ==== クライアント証明書の内容確認 ==== $ sudo openssl x509 -in /etc/pki/mgcCA/clientcert.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = Monster's Garage CA, emailAddress = domain-admin@monsters-g.com Validity Not Before: Feb 11 11:49:24 2019 GMT Not After : Jan 18 11:49:24 2119 GMT Subject: C = JP, ST = Hokkaido Pref., O = "Monster's Garage Co.,Ltd.", OU = -, CN = TomoYan, emailAddress = tomoyan@tomoyan.net Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:a9:41:68:6e:14:15:71:5f:87:ee:8b:1d:07:f1: 3b:64:64:e7:35:2f:93:4d:fe:05:1c:03:2a:1a:e5: 〜省略〜 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Cert Type: SSL Client, S/MIME, Object Signing Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 8A:DC:B8:F5:6D:E7:16:69:3B:0A:C7:4B:9D:BE:2D:4D:7C:F5:14:79 X509v3 Authority Key Identifier: keyid:F1:11:89:F3:AC:9E:C5:F4:01:B9:1A:96:17:A8:67:2D:13:6D:80:03 Signature Algorithm: sha256WithRSAEncryption 1c:d2:61:ab:26:74:cf:9f:8d:96:28:ff:6d:22:4b:33:00:46: e8:09:c1:75:07:a2:ec:aa:a9:31:6d:1d:63:80:da:26:87:01: 〜省略〜 ==== クライアント証明書、秘密鍵から PKCS#12 個人情報交換ファイルの作成 ==== PKCS #12 は Personal Information Exchange Syntax Standard という規格で定義された個人情報交換ファイルです。\\ クライアントでは、証明書と秘密鍵を1つのファイルにまとめた PKCS#12 フォーマットが主に用いられます。\\ ここでは、クライアント証明書、秘密鍵から PKCS#12 フォーマットの p12 ファイルを作成する。\\ $ sudo openssl pkcs12 -export -in /etc/pki/mgcCA/clientcert.crt -inkey /etc/pki/mgcCA/clientkey.pem -out /etc/pki/mgcCA/tomoyan-client.p12 -name "TomoYan PKCS#12" Enter pass phrase for /etc/pki/mgcCA/clientkey.pem: # クライアント秘密鍵のパスフレーズ Enter Export Password: # p12 ファイルを読み込むためのパスフレーズを入力 Verifying - Enter Export Password: # 確認用パスフレーズを入力 CAのカレントディレクトリに PKCS#12 フォーマットのファイルが作成される。 $ ll /etc/pki/mgcCA/ -rw------- 1 root root 2804 2月 11 07:48 tomoyan-client.p12 # 個人情報交換ファイル ==== クライアント CSR、証明書、秘密鍵、PKCS#12 個人情報交換ファイルのバックアップ ==== 必要に応じて作成したクライアント CSR、証明書、秘密鍵、PKCS#12 個人情報交換ファイルをわかりやすいように認証局(CA)の管理下のディレクトリにバックアップしておく。\\ $ sudo mkdir /etc/pki/mgcCA/client/{certs,private} $ sudo mv /etc/pki/mgcCA/clientreq.csr /etc/pki/mgcCA/client/certs/tomoyan.csr $ sudo mv /etc/pki/mgcCA/clientcert.crt /etc/pki/mgcCA/client/certs/tomoyan.crt $ sudo mv /etc/pki/mgcCA/clientkey.pem /etc/pki/mgcCA/client/private/tomoyan.pem $ sudo mv /etc/pki/mgcCA/tomoyan-client.p12 /etc/pki/mgcCA/client/private/tomoyan.p12 ===== トラブルシューティング ===== ==== openssl ca で CSR に署名する時に以下のエラーが発生する ==== openssl ca のバグである可能性が高いが、**-config** で **-keyfile** は分かっているはずなのに **-keyfile** オプションを省略すると、ファイル名: **'-out'** を **fopen** しようとする。\\ **-out** オプションをファイル名と勘違いしているので仕様では無いはずである。\\ 140354393380672:error:02001002:system library:fopen:No such file or directory:crypto/bio/bss_file.c:72:fopen('-out','r') 140354393380672:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:79: 以下の様にきちんと **-keyfile** オプションで CA の秘密鍵を指定するとエラーを回避できる。\\ $ sudo openssl ca -config /etc/pki/mgcCA/openssl-mgc-server.cnf -keyfile /etc/pki/mgcCA/private/cakey.pem -in /etc/pki/mgcCA/serverreq.csr -out /etc/pki/mgcCA/servercert.crt ==== ブラウザーで SSL のサーバー証明書が NET::ERR_CERT_COMMON_NAME_INVALID になる ==== Chrome 58 以降では、Common Name を評価しなくなったようである。\\ X509v3 Subject Alternative Name(SAN): DNS: で判定するようである。\\ CSR を作成する際に openssl.cnf の [ req ] -> req_extensions = v3_req -> [ v3_req ] -> subjectAltName = @alt_names -> [ alt_names ] -> DNS.1, DNS.2 ... を指定する必要があるが、CSR を作成するたびに openssl.cnf を修正するのは面倒である。\\ OpenSSL Version 1.1.1 より CSR 作成時のコマンド **openssl req** に **-addext** が指定出来るようになった。\\ $ sudo openssl req -new -config /etc/pki/mgcCA/openssl-mgc-server.cnf \ -addext 'subjectAltName=DNS:localhost,DNS:*.tomoyan.net' \ -keyout /etc/pki/mgcCA/serverkey.pem -out /etc/pki/mgcCA/serverreq.csr $ openssl req -in /etc/pki/mgcCA/serverreq.csr -text -noout Certificate Request: Data: Version: 1 (0x0) Subject: C = JP, ST = Hokkaido Pref., L = Sapporo City, O = "Monster's Garage Co.,Ltd.", OU = -, CN = tomoyan.net, emailAddress = domain-admin@monsters-g.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ad:8b:53:f7:40:38:70:8b:cb:b1:12:e0:55:77: 〜省略〜 Exponent: 65537 (0x10001) Attributes: Requested Extensions: X509v3 Subject Alternative Name: DNS:localhost, DNS:*.tomoyan.net Signature Algorithm: sha256WithRSAEncryption 89:2e:52:e2:cd:cb:d5:77:6a:05:73:32:6d:67:bf:73:09:17: 〜省略〜 Requested Extensions: X509v3 Subject Alternative Name: DNS:localhost, DNS:*.tomoyan.net X509v3 Subject Alternative Name: DNS: が指定出来ている。\\ ==== openssl ca で ERROR:There is already a certificate for が発生する ==== ERROR:There is already a certificate for /C=JP/ST=Hokkaido Pref./O=Monster's Garage Co.,Ltd./OU=-/CN=localhost, *.tomoyan.net/emailAddress=domain-admin@monsters-g.com The matching entry has the following details Type :Valid Expires on :21190123110413Z Serial Number :09 File name :unknown Subject Name :/C=JP/ST=Hokkaido Pref./O=Monster's Garage Co.,Ltd./OU=-/CN=localhost, *.tomoyan.net/emailAddress=domain-admin@monsters-g.com 初期設定では重複して登録できないので revoke 証明書の失効をする。 $ sudo openssl ca -config /etc/pki/mgcCA/openssl-mgc-ca.cnf -revoke /etc/pki/mgcCA/newcerts/09.pem Using configuration from /etc/pki/mgcCA/openssl-mgc-ca.cnf Enter pass phrase for /etc/pki/mgcCA/private/cakey.pem: # パスフレーズを入力 Revoking Certificate 09. Data Base Updated ===== 参考文献 ===== [[http://server-setting.info/centos/private-ca-cert.html|プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について | レンタルサーバー・自宅サーバー設定・構築のヒント]]\\ [[http://www.atmarkit.co.jp/ait/articles/1602/05/news039.html|Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする (1/2):Tech TIPS - @IT]]\\ [[https://kaede.jp/2018/06/10191854.html|【OpenSSL】SANでDNS情報を付与した証明書を作成する - かえでBlog]]\\ \\ [[https://qiita.com/kunichiko/items/12cbccaadcbf41c72735|RSA鍵、証明書のファイルフォーマットについて - Qiita]]\\ [[https://glorificatio.org/archives/2914|証明書や秘密鍵のフォーマットを変換することだけを書いた | Divide et impera]]\\ ==== 付録 ==== === 利用可能なコマンド一覧 ===
$ openssl version --options ...
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
標準コマンド、メッセージ ダイジェスト コマンド(非推奨)、暗号化コマンド(非推奨)の一覧。\\
$ openssl list {-standard-commands,-digest-commands,-cipher-commands}
asn1parse         ca                ciphers           cmp               
cms               crl               crl2pkcs7         dgst              
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
fipsinstall       gendsa            genpkey           genrsa            
help              info              kdf               list              
mac               nseq              ocsp              passwd            
pkcs12            pkcs7             pkcs8             pkey              
pkeyparam         pkeyutl           prime             rand              
rehash            req               rsa               rsautl            
s_client          s_server          s_time            sess_id           
smime             speed             spkac             srp               
storeutl          ts                verify            version           
x509              

blake2b512        blake2s256        md5               rmd160            
sha1              sha224            sha256            sha3-224          
sha3-256          sha3-384          sha3-512          sha384            
sha512            sha512-224        sha512-256        shake128          
shake256          sm3               

aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb      
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1     
aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb      
aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8     
aria-256-ctr      aria-256-ecb      aria-256-ofb      camellia-128-cbc  
camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  camellia-256-cbc  
camellia-256-ecb  des-ede           des-ede-cbc       des-ede-cfb       
des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
des-ede3-ofb      des3              

暗号スイートの説明の一覧表示。\\
$ openssl ciphers -v
TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
TLS_AES_128_CCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESCCM(128)            Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2 Kx=ECDH     Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM         TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(256)            Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128)            Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(128)            Mac=AEAD
ECDHE-ECDSA-AES128-CCM         TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(128)            Mac=AEAD
ECDHE-ECDSA-AES128-SHA256      TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)               Mac=SHA256
ECDHE-RSA-AES128-SHA256        TLSv1.2 Kx=ECDH     Au=RSA   Enc=AES(128)               Mac=SHA256
ECDHE-ECDSA-AES256-SHA         TLSv1   Kx=ECDH     Au=ECDSA Enc=AES(256)               Mac=SHA1
ECDHE-RSA-AES256-SHA           TLSv1   Kx=ECDH     Au=RSA   Enc=AES(256)               Mac=SHA1
ECDHE-ECDSA-AES128-SHA         TLSv1   Kx=ECDH     Au=ECDSA Enc=AES(128)               Mac=SHA1
ECDHE-RSA-AES128-SHA           TLSv1   Kx=ECDH     Au=RSA   Enc=AES(128)               Mac=SHA1
AES256-GCM-SHA384              TLSv1.2 Kx=RSA      Au=RSA   Enc=AESGCM(256)            Mac=AEAD
AES256-CCM                     TLSv1.2 Kx=RSA      Au=RSA   Enc=AESCCM(256)            Mac=AEAD
AES128-GCM-SHA256              TLSv1.2 Kx=RSA      Au=RSA   Enc=AESGCM(128)            Mac=AEAD
AES128-CCM                     TLSv1.2 Kx=RSA      Au=RSA   Enc=AESCCM(128)            Mac=AEAD
AES256-SHA256                  TLSv1.2 Kx=RSA      Au=RSA   Enc=AES(256)               Mac=SHA256
AES128-SHA256                  TLSv1.2 Kx=RSA      Au=RSA   Enc=AES(128)               Mac=SHA256
AES256-SHA                     SSLv3   Kx=RSA      Au=RSA   Enc=AES(256)               Mac=SHA1
AES128-SHA                     SSLv3   Kx=RSA      Au=RSA   Enc=AES(128)               Mac=SHA1
DHE-RSA-AES256-GCM-SHA384      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(256)            Mac=AEAD
DHE-RSA-CHACHA20-POLY1305      TLSv1.2 Kx=DH       Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-AES256-CCM             TLSv1.2 Kx=DH       Au=RSA   Enc=AESCCM(256)            Mac=AEAD
DHE-RSA-AES128-GCM-SHA256      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(128)            Mac=AEAD
DHE-RSA-AES128-CCM             TLSv1.2 Kx=DH       Au=RSA   Enc=AESCCM(128)            Mac=AEAD
DHE-RSA-AES256-SHA256          TLSv1.2 Kx=DH       Au=RSA   Enc=AES(256)               Mac=SHA256
DHE-RSA-AES128-SHA256          TLSv1.2 Kx=DH       Au=RSA   Enc=AES(128)               Mac=SHA256
DHE-RSA-AES256-SHA             SSLv3   Kx=DH       Au=RSA   Enc=AES(256)               Mac=SHA1
DHE-RSA-AES128-SHA             SSLv3   Kx=DH       Au=RSA   Enc=AES(128)               Mac=SHA1
PSK-AES256-GCM-SHA384          TLSv1.2 Kx=PSK      Au=PSK   Enc=AESGCM(256)            Mac=AEAD
PSK-CHACHA20-POLY1305          TLSv1.2 Kx=PSK      Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
PSK-AES256-CCM                 TLSv1.2 Kx=PSK      Au=PSK   Enc=AESCCM(256)            Mac=AEAD
PSK-AES128-GCM-SHA256          TLSv1.2 Kx=PSK      Au=PSK   Enc=AESGCM(128)            Mac=AEAD
PSK-AES128-CCM                 TLSv1.2 Kx=PSK      Au=PSK   Enc=AESCCM(128)            Mac=AEAD
PSK-AES256-CBC-SHA             SSLv3   Kx=PSK      Au=PSK   Enc=AES(256)               Mac=SHA1
PSK-AES128-CBC-SHA256          TLSv1   Kx=PSK      Au=PSK   Enc=AES(128)               Mac=SHA256
PSK-AES128-CBC-SHA             SSLv3   Kx=PSK      Au=PSK   Enc=AES(128)               Mac=SHA1
DHE-PSK-AES256-GCM-SHA384      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESGCM(256)            Mac=AEAD
DHE-PSK-CHACHA20-POLY1305      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-AES256-CCM             TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESCCM(256)            Mac=AEAD
DHE-PSK-AES128-GCM-SHA256      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESGCM(128)            Mac=AEAD
DHE-PSK-AES128-CCM             TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESCCM(128)            Mac=AEAD
DHE-PSK-AES256-CBC-SHA         SSLv3   Kx=DHEPSK   Au=PSK   Enc=AES(256)               Mac=SHA1
DHE-PSK-AES128-CBC-SHA256      TLSv1   Kx=DHEPSK   Au=PSK   Enc=AES(128)               Mac=SHA256
DHE-PSK-AES128-CBC-SHA         SSLv3   Kx=DHEPSK   Au=PSK   Enc=AES(128)               Mac=SHA1
ECDHE-PSK-CHACHA20-POLY1305    TLSv1.2 Kx=ECDHEPSK Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-AES256-CBC-SHA       TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(256)               Mac=SHA1
ECDHE-PSK-AES128-CBC-SHA256    TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(128)               Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA       TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(128)               Mac=SHA1
RSA-PSK-AES256-GCM-SHA384      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=AESGCM(256)            Mac=AEAD
RSA-PSK-CHACHA20-POLY1305      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
RSA-PSK-AES128-GCM-SHA256      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=AESGCM(128)            Mac=AEAD
RSA-PSK-AES256-CBC-SHA         SSLv3   Kx=RSAPSK   Au=RSA   Enc=AES(256)               Mac=SHA1
RSA-PSK-AES128-CBC-SHA256      TLSv1   Kx=RSAPSK   Au=RSA   Enc=AES(128)               Mac=SHA256
RSA-PSK-AES128-CBC-SHA         SSLv3   Kx=RSAPSK   Au=RSA   Enc=AES(128)               Mac=SHA1