SSL/TLS

PKIと証明書,CAの話

  • https://milestone-of-se.nesuke.com/sv-advanced/digicert/digital-certification-summary/
    • うまくまとまっている.理解しやすい.

CA証明書の発行

  • https://www.ipentec.com/document/create-server-certificate-file

CA機関による審査(認証局による認証)

  • CAは誰にでもサーバ証明書を発行するわけではなく,もちろん正当性を審査して発行する.
  • 3つあるっぽい.
    • DV証明書 (Domain Validation証明書): 「対象ドメインを管理する権限があるか」ということのみを確認する.(ex. Let's Encrypt)
    • OV証明書 (Organization Validation証明書): ドメインの管理権に加え,運営組織の実在性などを電話などにより確認する.
    • EV証明書 (Extended Validation証明書): OV 証明書と同様の確認を行うが,確認方法が国際的な認定基準に基づいて行われる.加えて,ブラウザのアドレスバーが緑色になる「グリーンバー」によりそのWebサーバの安全性をよりアピールすることができる.グリーンバーには運営組織が表示される.

SSL証明書の中身

  • https://www.ssloff.com/members/knowledgebase/88/SSL.html
    • ウェブサーバの情報(識別名(ディスティングイッシュネーム))
    • Common Name(コモンネーム)
    • Organizational Name(組織名)
    • Organizational Unit(部署名)
    • Locality(市区町村名)
    • State(都道府県名)
    • Country(国コード)
    • ウェブサーバの公開鍵
    • 証明書発行局名
    • 証明書発行局の電子署名
    • 有効期間
    • 証明書の基本情報
    • 証明書のバージョン(X.509 Ver.3など)
    • 証明書の通し番号
    • 電子署名に使われている暗号化方式
  • みてみた(jp7fkf.dev)
% openssl s_client -connect jp7fkf.dev:443 -showcerts
CONNECTED(00000005)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = jp7fkf.dev
verify return:1
---
Certificate chain
 0 s:/CN=jp7fkf.dev
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIFWzCCBEOgAwIBAgISA++CwuEWR1BSNmKMMywxatI1MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA1MjIyMTA1MDRaFw0x
OTA4MjAyMTA1MDRaMBUxEzARBgNVBAMTCmpwN2ZrZi5kZXYwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQCeakRQnNnZ10tEf4V/ruiRof90Sck4qqIZDlAn
BSC8zn6LTVJ6OaqAV0K5vNwZqtUxst4+X2dts1tSll6hx6Td+UbDdrjdwQ43Yxus
1nYJ/LmVPohVeSXVzznBIr9ejOzcuCbtzpsGDvSos/yt64299p5HH1iwTheKNtNX
k/C6dU6fcsKd4UApq8FONdZvL+2vFPeIwlBMFRdeeDzNApdmPuMmOlSV30HIHbi4
kcpkYVONil0SRAPDu5fwefewrewafeageq33tggggsdgerrfwD60fSV2PLOigVEk
Es4KMb6CAshphKm2bc/DlkuB5EMRNgNOabL3U5DXCXjBTI1VAgMBAAGjggJuMIIC
ajAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFDo96T5gvWjs32VLsthaNVStI/y2MB8G
A1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEBBGMwYTAu
BggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9yZzAv
BggrBgEFBQcwAoYjaHR0cDovL2fsfsfsssssssssssfsfefabmNyeXB0Lm9yZy8w
JQYDVR0RBB4wHIIKanA3ZmtmLmRldoIOd3d3LmpwN2ZrZi5kZXYwTAYDVR0gBEUw
QzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDov
L2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdgDi
aUuuJujpQAnohhu2O4PUPuf+dIj7pI8okwGd3fHb/gAAAWrhk4yaAAAEAwBHMEUC
IH9cpfJVo3HZmsxvoPtvHXrn9uDpSN2qoHbLYDjO3xbTAiEAgEsJZQwzugosRyN0
PGefe4jJg2UILjAGWBjWnYMVqL0AdQBj8tvN6DvMLM8LcoQnV2szpI1hd4+9daY4
scdoVEvYjQAAAWrhk4ybAAAEAwBGMEQCIEpmf3VR5xNU1EAuzgDbYfrKG4PYN5zF
NGSV4lC4zfIUAiAeWJ6GudNy415l2T6D0a6ib4HHlzzL4yJnD0ggXEj/NTANBgkq
hkiG9w0BAQsFAAOCAQEAWZmo694Q0Brmw5zDuWL1LB53QnUEgUSDqM7wZKKXnHH2
Z9fq1CS6ua0cG5VydfEy5XdwKWDeVgVO5PtLJnBEO9medTsunl6c6R11fMGaUsf1
Ujw+mkbYX2Bsx2nmtEPy0Y8Csa+73KJ+BCZ0ggTg+ykYPuQmtr0ERTyhkbAP/xcU
4ZspiOd3EvZ4vDt76kEyv6PF4Vn9YZic/ZCThXJFVTVURjQgFK+I6kz7sWw5v07A
DaFi0ZKzsqQccQRWdeDW0PTAzpHGO+aGylacTmsRUZ/2lx+ta8vp90562BY7wWe7
GemmuxAHMpewVRTb0GrV7VfOUukKzjTAlW6Z08vWlw==
-----END CERTIFICATE-----
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxwertfgvsawtghgefavssrtywhhhfdsaww4ggTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgghrtwefbgtrh45t3refsadbh543tttsbthtgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=jp7fkf.dev
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 3230 bytes and written 350 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-CHACHA20-POLY1305
    Session-ID: 050F117E22DDBEBA5ECB8104A76D6BB35DCCC5CC26B242A88C40818482B6ED36
    Session-ID-ctx:
    Master-Key: 4301520EB507D5305BB86665D3F7C2C413DDC0A4F48C227E96228D09B7B9316E5B17EDB54C0FBD0EBDCF91D1F4B35BDF
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
    0000 - f4 96 65 45 bd 0d e6 fc-b4 4d 02 14 ee 8d b4 25   ..eE.....M.....%
    0010 - f0 79 41 bb cb cf 3a 10-fa d1 c2 36 62 56 16 45   .yA...:....6bV.E
    0020 - 68 4a ff bd ff 49 84 a5-91 db 51 42 e5 15 41 c6   hJ...I....QB..A.
    0030 - ef ec a8 fc ac d2 c4 ee-fc cc ff 85 37 1d f6 74   ............7..t
    0040 - a1 bd 23 4b 26 8d 79 bc-be 0e ac 1b 83 33 36 11   ..#K&.y......36.
    0050 - 04 17 b9 87 51 68 46 68-2a 90 05 3c ba b5 86 5a   ....QhFh*..<...Z
    0060 - 7b 0e d8 99 c3 6a 54 05-e0 6f b8 fb 87 d9 d5 b0   {....jT..o......
    0070 - 81 44 a4 d1 19 f3 13 77-e4 2f 2f e6 c0 93 fc 25   .D.....w.//....%
    0080 - 49 64 f0 d4 91 7f 45 16-fb 4e d4 69 ff 8e 77 7e   Id....E..N.i..w~
    0090 - 76 23 8b 06 fa cf 91 74-f4 e5 de 5a a5 6f 7c f7   v#.....t...Z.o|.

    Start Time: 1562073404
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
closed
  • 頭に「s」がついているのがその証明書の情報,「i」がついているのがその証明書の発行者の情報らしい.subjectとissuerだな.

証明書失効リスト(しょうめいしょしっこうリスト、英: Certificate Revocation List, CRL)

  • 証明書が失効した公開鍵のシリアル番号のリスト.
  • これに記載のある証明書は失効済みなので信頼できない.
    • Revoked: 失効
    • Hold: 停止 の2パターンがあり,失効は再び利用はできないが,停止状態であれば失効リストから削除されて有効に戻すことができる.

Certificate Signing Request(CSR)

  • 証明書発行リクエスト.
  • 公開鍵,コモンネーム(FQDN),組織名,部署名等が含まれる.
  • これらをディスティングイッシュネーム情報と呼ぶ.
  • openssl req -in <csr_file> -text で確認できる.

プライベート認証局(root ca, intermediate ca)

  • https://qiita.com/haruca_tech/items/ac5ece9618a613f37ce5

wildcard 証明書 - SSL

  • https://speakerdeck.com/kenojiri/how-to-get-wildcard-certs-without-any-charges