Экспорт SSL/TLS-сертификата сайта с помощью командной строки

Для начала, пару слов о том, в каких ситуациях нам это может пригодиться:

  • необходимо получить сертификат удостоверяющего центра, которым выпущен сертификат ресурса, но непонятно, откуда его взять. Или понятно, откуда взять, но это займет много времени, и мы не хотим с этим связываться;
  • нет желания возиться с браузерами, путешествовать по вкладкам и параметрам в поисках нужной опции.

Что нам потребуется:

  1. Набор OpenSSL для Windows (или Linux), а точнее уже скомпилированные бинарники. Их мы можем скачать на этом сайте.
  2. Любой архиватор, способный извлекать архивы ZIP.

В данном примере мы будем выполнять все действия на машине с Windows. Итак…

    1. Качаем архив с сайта https://indy.fulgan.com/SSL/. На момент публикации (январь 2018) самая последняя версия OpenSSL имеет номер 1.0.2. Загружаем архив, извлекаем его содержимое в какую-либо папку;
    2. После извлечения архива наблюдаем пару библиотек, файлы справки и приложение openssl.exe. Запускаем в папке командную строку;
    3. Выполняем команду:
      openssl s_client -showcerts -connect www.example.com:443

      и, прежде чем увидеть результат, разберем ее параметры:
      s_client — инициализировать клиент SSL/TLS, который подключится к удаленному узлу с использованием одного из указанных протоколов;
      -showcerts — показать цепочку сертификатов удаленного узла. Полностью.
      -connect host:port — указать адрес хоста и порт подключения. В случае, если удаленный хост использует расширения протокола TLS под названием Server Name Identification (SNI), можно задать адрес, который будет использоваться при отправке сообщения ClientHello. За это отвечает аргумент -servername.

    4. Ну что, пора бы уже взглянуть на то, какой результат нам вывела утилита. А результат следующий:
      E:\DL\openssl-1.0.2n-x64_86-win64>openssl s_client -showcerts -connect www.example.com:443
      WARNING: can't open config file: /usr/local/ssl/openssl.cnf
      CONNECTED(000001B8)
      depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
      verify error:num=20:unable to get local issuer certificate
      ---
      Certificate chain
      0 s:/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
      i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
      -----BEGIN CERTIFICATE-----
      MIIF8jCCBNqgAwIBAgIQDmTF+8I2reFLFyrrQceMsDANBgkqhkiG9w0BAQsFADBw
      MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
      d3cuZGlnaWNlcnQuY29tMS8wLQYDVQQDEyZEaWdpQ2VydCBTSEEyIEhpZ2ggQXNz
      dXJhbmNlIFNlcnZlciBDQTAeFw0xNTExMDMwMDAwMDBaFw0xODExMjgxMjAwMDBa
      MIGlMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxML
      TG9zIEFuZ2VsZXMxPDA6BgNVBAoTM0ludGVybmV0IENvcnBvcmF0aW9uIGZvciBB
      c3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVyczETMBEGA1UECxMKVGVjaG5vbG9neTEY
      MBYGA1UEAxMPd3d3LmV4YW1wbGUub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
      MIIBCgKCAQEAs0CWL2FjPiXBl61lRfvvE0KzLJmG9LWAC3bcBjgsH6NiVVo2dt6u
      Xfzi5bTm7F3K7srfUBYkLO78mraM9qizrHoIeyofrV/n+pZZJauQsPjCPxMEJnRo
      D8Z4KpWKX0LyDu1SputoI4nlQ/htEhtiQnuoBfNZxF7WxcxGwEsZuS1KcXIkHl5V
      RJOreKFHTaXcB1qcZ/QRaBIv0yhxvK1yBTwWddT4cli6GfHcCe3xGMaSL328Fgs3
      jYrvG29PueB6VJi/tbbPu6qTfwp/H1brqdjh29U52Bhb0fJkM9DWxCP/Cattcc7a
      z8EXnCO+LK8vkhw/kAiJWPKx4RBvgy73nwIDAQABo4ICUDCCAkwwHwYDVR0jBBgw
      FoAUUWj/kK8CB3U8zNllZGKiErhZcjswHQYDVR0OBBYEFKZPYB4fLdHn8SOgKpUW
      5Oia6m5IMIGBBgNVHREEejB4gg93d3cuZXhhbXBsZS5vcmeCC2V4YW1wbGUuY29t
      ggtleGFtcGxlLmVkdYILZXhhbXBsZS5uZXSCC2V4YW1wbGUub3Jngg93d3cuZXhh
      bXBsZS5jb22CD3d3dy5leGFtcGxlLmVkdYIPd3d3LmV4YW1wbGUubmV0MA4GA1Ud
      DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdQYDVR0f
      BG4wbDA0oDKgMIYuaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItaGEtc2Vy
      dmVyLWc0LmNybDA0oDKgMIYuaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTIt
      aGEtc2VydmVyLWc0LmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwBATAqMCgGCCsG
      AQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgGBmeBDAECAjCB
      gwYIKwYBBQUHAQEEdzB1MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
      dC5jb20wTQYIKwYBBQUHMAKGQWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
      aWdpQ2VydFNIQTJIaWdoQXNzdXJhbmNlU2VydmVyQ0EuY3J0MAwGA1UdEwEB/wQC
      MAAwDQYJKoZIhvcNAQELBQADggEBAISomhGn2L0LJn5SJHuyVZ3qMIlRCIdvqe0Q
      6ls+C8ctRwRO3UU3x8q8OH+2ahxlQmpzdC5al4XQzJLiLjiJ2Q1p+hub8MFiMmVP
      PZjb2tZm2ipWVuMRM+zgpRVM6nVJ9F3vFfUSHOb4/JsEIUvPY+d8/Krc+kPQwLvy
      ieqRbcuFjmqfyPmUv1U9QoI4TQikpw7TZU0zYZANP4C/gj4Ry48/znmUaRvy2kvI
      l7gRQ21qJTK5suoiYoYNo3J9T+pXPGU7Lydz/HwW+w0DpArtAaukI8aNX4ohFUKS
      wDSiIIWIWJiJGbEeIO0TIFwEVWTOnbNl/faPXpk5IRXicapqiII=
      -----END CERTIFICATE-----
      1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
      i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
      -----BEGIN CERTIFICATE-----
      MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs
      MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
      d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
      ZSBFViBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAyMjEyMDAwMFowcDEL
      MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
      LmRpZ2ljZXJ0LmNvbTEvMC0GA1UEAxMmRGlnaUNlcnQgU0hBMiBIaWdoIEFzc3Vy
      YW5jZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2
      4C/CJAbIbQRf1+8KZAayfSImZRauQkCbztyfn3YHPsMwVYcZuU+UDlqUH1VWtMIC
      Kq/QmO4LQNfE0DtyyBSe75CxEamu0si4QzrZCwvV1ZX1QK/IHe1NnF9Xt4ZQaJn1
      itrSxwUfqJfJ3KSxgoQtxq2lnMcZgqaFD15EWCo3j/018QsIJzJa9buLnqS9UdAn
      4t07QjOjBSjEuyjMmqwrIw14xnvmXnG3Sj4I+4G3FhahnSMSTeXXkgisdaScus0X
      sh5ENWV/UyU50RwKmmMbGZJ0aAo3wsJSSMs5WqK24V3B3aAguCGikyZvFEohQcft
      bZvySC/zA/WiaJJTL17jAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA
      MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
      NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
      dC5jb20wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29t
      L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDA9BgNVHSAENjA0MDIG
      BFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ
      UzAdBgNVHQ4EFgQUUWj/kK8CB3U8zNllZGKiErhZcjswHwYDVR0jBBgwFoAUsT7D
      aQP4v0cB1JgmGggC72NkK8MwDQYJKoZIhvcNAQELBQADggEBABiKlYkD5m3fXPwd
      aOpKj4PWUS+Na0QWnqxj9dJubISZi6qBcYRb7TROsLd5kinMLYBq8I4g4Xmk/gNH
      E+r1hspZcX30BJZr01lYPf7TMSVcGDiEo+afgv2MW5gxTs14nhr9hctJqvIni5ly
      /D6q1UEL2tU2ob8cbkdJf17ZSHwD2f2LSaCYJkJA69aSEaRkCldUxPUd1gJea6zu
      xICaEnL6VpPX/78whQYwvwt/Tv9XBZ0k7YXDK/umdaisLRbvfXknsuvCnQsH6qqF
      0wGjIChBWUMo0oHjqvbsezt3tkBigAVBRQHvFwY+3sAzm2fTYS5yh+Rp/BIAV0Ae
      cPUeybQ=
      -----END CERTIFICATE-----
      ---
      Server certificate
      subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
      issuer=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
      ---
      No client certificate CA names sent
      Peer signing digest: SHA512
      Server Temp Key: ECDH, P-256, 256 bits
      ---
      SSL handshake has read 3388 bytes and written 433 bytes
      ---
      New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
      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-AES128-GCM-SHA256
      Session-ID: A2BC23F7965E4E5E88F3AE57A57C37CB3B874B18DAEEB55FE1C4A6AE41C07A86
      Session-ID-ctx:
      Master-Key: 8CF85EEB79B251E14B05E2629C97709E404067A75C1A7A5D2A5AB030998E957BDBD5D49754A6CB92039666CD0285A213
      Key-Arg : None
      PSK identity: None
      PSK identity hint: None
      SRP username: None
      TLS session ticket lifetime hint: 7200 (seconds)
      TLS session ticket:
      0000 - ba da fe 06 8e 5c 1e dc-1d a2 86 df 66 30 a7 9d .....\......f0..
      0010 - f8 72 ec 4c 44 e3 61 f0-c6 66 71 d1 86 ec 74 fc .r.LD.a..fq...t.
      0020 - 58 07 de 6c 0c 58 1d ba-7b 13 31 cf cc 8a 24 e6 X..l.X..{.1...$.
      0030 - 3a c5 9b 7b 5a fb 5f e0-0b 21 e7 1c fa 0f b2 33 :..{Z._..!.....3
      0040 - 63 3b d1 c6 83 c4 b1 62-c6 8a b9 c4 ed 04 78 ff c;.....b......x.
      0050 - 3d a2 0c 00 ef 85 59 f9-a1 88 1d e4 ea c9 c4 aa =.....Y.........
      0060 - 9e e5 2f 7f b6 d5 85 91-80 8f cf e2 88 16 57 65 ../...........We
      0070 - 2e d2 21 6c 7b 1b 9c 19-e1 ef b4 c9 14 35 65 b4 ..!l{........5e.
      0080 - 1a 14 86 85 aa f5 48 81-d8 27 e2 9d 1f 7a 2f 30 ......H..'...z/0
      0090 - 32 d6 e9 5e 17 fe c0 c5-c1 7e dd a4 b6 c2 97 bb 2..^.....~......
      
      Start Time: 1515597551
      Timeout : 300 (sec)
      Verify return code: 20 (unable to get local issuer certificate)
      ---

      Основными данными из представленных у нас являются два открытых ключа и некая техническая информация. Ах да, мы же хотим экспортировать открытые ключи в виде файлов и поместить их на рабочий стол, чтобы затем долго ими любоваться. Правда, здорово? Для этого, скопируем поочередно ключи в текстовые файлы. На всякий случай: ключ начинается со слов -----BEGIN CERTIFICATE----- и заканчивается словами -----END CERTIFICATE-----. Всё содержимое между этими строками, включая сами строки, мы копируем в текстовый файл (1 ключ = 1 текстовый файл), а затем меняем его расширение с .txt на .cer.Теперь посмотрим на то, что у нас должно в итоге получиться:

      Вот собственно, и всё. На вкладе «Путь сертификации» мы (если, конечно, повезет), можем увидеть путь сертификации, который включает в себя корневой сертификат удостоверяющего центра. При необходимости, устанавливаем его в хранилище доверенных корневых или промежуточных центров сертификации и радуемся жизни. Если есть вопросы, добро пожаловать в комментарии! 🙂

      P.S. Все аргументы командной строки для openssl в режиме s_client доступны здесь: https://wiki.openssl.org/index.php/Manual:S_client(1)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *