Новости из Блогов Workflow: SSL сертификаты

Discussion in 'Мировые новости. Обсуждения.' started by Suicide, 28 Jul 2012.

  1. Suicide

    Suicide Super Moderator
    Staff Member

    Joined:
    24 Apr 2009
    Messages:
    2,482
    Likes Received:
    7,062
    Reputations:
    693
    Workflow: SSL сертификаты


    Одна из рутинных операций, с которыми приходится сталкиваться системному администратору - управление SSL сертификатами. Я постараюсь собрать на одной странице справочное руководство, которое поможет управлять жизненным циклом сертификата. Для наглядности процесса я буду описывать процедуру в контексте WEB сервера (в остальных случаях многое совпадает, хотя есть и различия).

    Для себя я выделяю несколько этапов в жизненном цикле SSL сертификата:

    • создание SSL сертификата
    • установка SSL сертификата
    • мониторинг валидности и срока окончания SSL сертификата

    Создание SSL сертификата

    Сертификат может быть подписан удостоверяющим центром (Certificate Authority, CA), чей сертификат не входит в список сертификатов корневых удостоверяющих центров (Root CA) включенных в поставку ОС или браузера, в этом случае он называется само-подписанным (self-signed).

    Генерация запроса на подписывание сертификата (Certificate Sign Request, CSR)


    Создаем приватный ключ для сертификата (в целях безопасности создавется ключ с длиной 2048 бит)
    Code:
    $ openssl genrsa -out www.example.com.key 2048
    Generating RSA private key, 2048 bit long modulus
    ............+++
    .....................+++
    e is 65537 (0x10001)
    Далее генерируем запрос на подпись сертификата
    Code:
    $ openssl req -new -key www.example.com.key -out www.example.com.csr -subj '/CN=www.example.com/[email protected]/'
    Созданный запрос находится в файле www.example.com.csr. Дальнейшие действия зависят от CA и я их описывать не буду.

    Генерация self-signed сертификата

    Чтобы создать self-signed сертификат нужно выполнить шаги, описанные в разделе "Генерация запроса на подписывание сертификата", после чего у вас будет два файла: www.example.com.key и www.example.com.csr - они пригодятся для генерации сертификата.

    Как правило сейчас при покупке сертификата для www.example.com удостоверяющие центры добавляют к нему и example.com в качестве Subject Alternate Names (SAN). Я поступлю так же.
    Code:
    $ cat > www.example.com.cnf << EOF
    subjectAltName=DNS:example.com
    EOF
    Code:
    $ openssl x509 -req -days 365 -in www.example.com.csr -signkey www.example.com.key -text -extfile www.example.com.cnf -out www.example.com.crt
    Signature ok
    subject=/CN=www.example.com/[email protected]
    Getting Private key
    Установка SSL сертификата

    В этом разделе я рассмотрю установку сертификата для наиболее часто встречающихся web-серверов Apache2 и Nginx. Для других процедура схожая и подробна описана в документации.

    Если у вас сертификат self-signed, то вам нужны два файла: www.example.com.key - приватный ключ и www.example.com.crt - сертификат для домена www.example.com. Если же сертификат был куплен у CA, то зачастую к нему прилагается еще и сертификат CA, например gd_bundle.crt (у GoDaddy)

    Установка сертификата для Apache2


    Чтобы ограничить доступ к использованию сертификата, его приватный ключ доступен только пользователю root.
    Code:
    $ ls -l /etc/ssl/{certs,private}/www.example.com.*
    -rw-r--r-- 1 root root 3951 Июл 27 12:57 /etc/ssl/certs/www.example.com.crt
    -rw------- 1 root root 1675 Июл 27 12:42 /etc/ssl/private/www.example.com.key
    Добавьте в файл конфигурации сайта блок
    Code:
    <IfModule mod_ssl.c>
        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/www.example.com.crt
        SSLCertificateKeyFile /etc/ssl/private/www.example.com.key
        # Uncomment line below if you have intermediate CA certificate
        #SSLCertificateChainFile /etc/ssl/certs/your_CA_intermediate.crt
    </IfModule>
    После этого можно перезагрузить конфигурацию Apache
    Code:
    # service httpd configtest && service httpd reload
    Установка сертификата для Nginx

    Добавьте в конфигурацию сайта блок
    Code:
    ssl_engine on;
    ssl_certificate /etc/ssl/certs/www.example.com.crt;
    ssl_certificate_key /etc/ssl/private/www.example.com.key;
    Если у вас есть сертификат для intermediate CA, то его нужно объединить с сертификатом домена
    Code:
    # cat /etc/ssl/certs/www.example.com.crt /etc/ssl/certs/your_CA_intermediate.crt > /etc/ssl/certs/www.example.com_nginx.crt
    И далее использовать для Nginx /etc/ssl/certs/www.example.com_nginx.crt вместо /etc/ssl/certs/www.example.com.crt. После этого можно перезагрузить конфигурацию Nginx
    Code:
    # nginx -t && service nginx reload

    Мониторинг валидности и срока окончания SSL сертификата


    Будет описано позже.

    Получение информации о SSL сертификате

    Чтобы получить информацию о сертификате www.example.com.crt нужно выполнить:
    Code:
    $ openssl x509 -in www.example.com.crt -text -noout
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                cb:c6:3f:6f:36:40:9a:a7
            Signature Algorithm: sha1WithRSAEncryption
            Issuer: CN=example.com/[email protected]
            Validity
                Not Before: Jul 27 09:57:09 2012 GMT
                Not After : Jul 27 09:57:09 2013 GMT
            Subject: CN=example.com/[email protected]
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                RSA Public Key: (2048 bit)
                    Modulus (2048 bit):
                        00:ab:26:02:ea:14:6d:36:d0:61:9e:d6:45:d5:fe:
                        6b:a5:f6:ac:de:2c:93:41:91:56:e0:0c:e8:25:43:
                        d2:6e:25:2a:5b:81:fd:bf:1f:72:ec:94:84:32:35:
                        6f:d9:ec:8f:87:c1:94:d4:58:7a:ab:bc:9e:5b:4d:
                        e1:d9:9f:97:08:db:6a:9d:1d:dd:c4:af:c2:f7:79:
                        80:e0:15:f5:43:01:1f:09:c4:78:60:7a:34:d0:20:
                        db:67:47:12:33:1b:0e:d1:8a:db:e7:25:df:7b:66:
                        1d:fa:09:c5:61:50:05:51:bd:9d:06:59:79:a0:77:
                        eb:fb:f8:f1:40:a8:8c:6f:fe:99:54:74:40:61:a5:
                        35:18:99:88:e2:34:66:05:0e:94:8a:c7:65:60:d4:
                        1a:b6:69:d4:63:a4:e4:fe:28:53:a9:1e:f2:b1:c5:
                        98:4b:6a:59:92:32:59:10:12:38:57:c4:56:41:ba:
                        ac:01:24:ee:eb:3d:eb:a3:a6:91:11:18:9f:0f:04:
                        a6:f9:d4:a0:4f:fb:6e:bd:83:9f:d0:eb:68:26:dc:
                        f9:f0:f0:44:4d:6a:50:48:a5:df:39:6f:ef:99:b7:
                        d3:00:ff:41:cd:44:54:fe:aa:10:73:0f:b7:e6:7e:
                        18:28:95:b9:2d:8d:cc:83:19:31:2e:fd:16:4c:78:
                        f3:2b
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Subject Alternative Name: 
                    DNS:www.example.com
        Signature Algorithm: sha1WithRSAEncryption
            0a:bb:ec:fe:b9:a3:de:63:9c:42:42:8f:aa:5c:a5:6e:f0:aa:
            d6:b1:5b:ee:03:c3:89:af:61:98:e5:84:fb:03:1b:80:d7:a7:
            bb:c0:f7:3d:59:1e:51:76:43:83:f2:17:08:2a:7f:03:f0:7d:
            b8:08:df:87:c4:40:5d:dd:26:8c:27:01:18:9c:6b:e4:4d:f9:
            bd:58:d5:85:2b:dc:e2:11:ff:b1:98:ea:8e:72:b2:24:22:ab:
            d5:f1:ea:3e:56:79:db:32:38:57:43:6f:42:2b:9d:ef:5b:37:
            b0:6f:d5:fe:80:04:67:4f:88:ce:84:20:6a:13:f0:8a:b4:75:
            6f:70:6f:f8:f2:b6:4b:74:50:6d:81:24:4a:1c:b3:6a:1c:12:
            a2:c4:8f:12:53:cd:a1:a5:93:2e:7a:ac:21:fb:0d:34:52:cc:
            e3:40:8c:5a:e5:06:8a:41:9e:9a:8f:6a:3b:45:e0:68:e8:dd:
            c8:e1:75:da:48:a2:d6:a4:8f:71:a1:11:08:f6:65:55:b4:26:
            f8:71:02:80:e6:90:fe:1f:5b:94:9c:0e:7d:1f:6b:49:8b:a8:
            3d:27:c3:0f:69:fc:ee:31:3b:62:b4:c4:03:3c:6b:b2:b4:0e:
            fd:da:64:53:a3:e3:54:67:90:6a:b6:c6:cb:c8:0f:97:5a:c3:
            a1:a9:71:bf
    Чтобы получить информацию о запросе на подпись сертификата www.example.com.csr нужно выполнить:
    Code:
    $ openssl req -in www.example.com.csr -text -noout
    Certificate Request:
        Data:
            Version: 0 (0x0)
            Subject: CN=example.com/[email protected]
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                RSA Public Key: (2048 bit)
                    Modulus (2048 bit):
                        00:ab:26:02:ea:14:6d:36:d0:61:9e:d6:45:d5:fe:
                        6b:a5:f6:ac:de:2c:93:41:91:56:e0:0c:e8:25:43:
                        d2:6e:25:2a:5b:81:fd:bf:1f:72:ec:94:84:32:35:
                        6f:d9:ec:8f:87:c1:94:d4:58:7a:ab:bc:9e:5b:4d:
                        e1:d9:9f:97:08:db:6a:9d:1d:dd:c4:af:c2:f7:79:
                        80:e0:15:f5:43:01:1f:09:c4:78:60:7a:34:d0:20:
                        db:67:47:12:33:1b:0e:d1:8a:db:e7:25:df:7b:66:
                        1d:fa:09:c5:61:50:05:51:bd:9d:06:59:79:a0:77:
                        eb:fb:f8:f1:40:a8:8c:6f:fe:99:54:74:40:61:a5:
                        35:18:99:88:e2:34:66:05:0e:94:8a:c7:65:60:d4:
                        1a:b6:69:d4:63:a4:e4:fe:28:53:a9:1e:f2:b1:c5:
                        98:4b:6a:59:92:32:59:10:12:38:57:c4:56:41:ba:
                        ac:01:24:ee:eb:3d:eb:a3:a6:91:11:18:9f:0f:04:
                        a6:f9:d4:a0:4f:fb:6e:bd:83:9f:d0:eb:68:26:dc:
                        f9:f0:f0:44:4d:6a:50:48:a5:df:39:6f:ef:99:b7:
                        d3:00:ff:41:cd:44:54:fe:aa:10:73:0f:b7:e6:7e:
                        18:28:95:b9:2d:8d:cc:83:19:31:2e:fd:16:4c:78:
                        f3:2b
                    Exponent: 65537 (0x10001)
            Attributes:
                a0:00
        Signature Algorithm: sha1WithRSAEncryption
            67:ee:0d:d9:c1:71:95:21:4f:b1:2a:7b:c2:db:76:1d:28:5c:
            a3:25:8e:ff:73:6f:cf:39:bd:64:3a:f8:14:de:c9:3c:9a:83:
            68:f1:be:0f:f1:46:4f:4d:e0:70:1b:a4:f6:21:f3:31:2e:42:
            cc:90:07:f3:d9:79:26:67:91:c6:89:56:40:bd:a1:06:92:c0:
            b2:e8:fe:79:e3:74:44:6c:29:95:32:af:f5:4c:0d:0f:fc:8a:
            51:41:86:92:fd:a5:6e:c3:a6:5e:29:4a:57:ea:21:b6:36:b7:
            c6:91:aa:70:ea:0e:b9:da:e7:80:5d:f4:38:ab:94:48:f9:4b:
            da:bc:29:36:25:7c:ac:cd:74:34:4c:87:bc:78:0a:18:81:a0:
            8f:02:e2:24:20:d4:7f:ce:46:bc:01:fb:1f:2a:1e:80:dd:98:
            a7:68:c3:3c:8e:b0:85:45:b2:1b:5e:7e:9b:d7:c6:89:59:41:
            30:e4:1e:ca:8e:2a:c0:88:85:78:33:83:10:9b:d8:fc:0c:40:
            89:cb:c6:6d:a3:54:9f:ea:50:1f:8f:cd:59:85:54:c9:0a:23:
            70:49:06:05:00:62:ce:9d:4e:e4:5a:4e:e5:36:19:96:ac:a2:
            90:07:42:42:74:07:96:3d:6a:36:dc:77:9e:ad:9f:01:e2:16:
            ce:e6:7b:da
    Чтобы проверить, что сертификат www.example.com.crt соответствует секретному ключу www.example.com.key, нужно выполнить:
    Code:
    $ openssl s_server -key www.example.com.key -cert www.example.com.crt
    Using default temp DH parameters
    Using default temp ECDH parameters
    ACCEPT
    Чтобы проверить, что на хосте www.example.com:443 работает SSL, нужно
    Code:
    $ openssl s_client -connect www.example.com:443
    CONNECTED(00000003)
    depth=0 /CN=www.example.com/[email protected]
    verify error:num=18:self signed certificate
    verify return:1
    depth=0 /CN=www.example.com/[email protected]
    verify return:1
    ---
    Certificate chain
     0 s:/CN=www.example.com/[email protected]
       i:/CN=www.example.com/[email protected]
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIDHzCCAgegAwIBAgIJAPDuTyLDfjC6MA0GCSqGSIb3DQEBBQUAMEExGDAWBgNV
    BAMTD3d3dy5leGFtcGxlLmNvbTElMCMGCSqGSIb3DQEJARYWcG9zdG1hc3RlckBl
    eGFtcGxlLmNvbTAeFw0xMjA3MjcxMjIxMjdaFw0xMzA3MjcxMjIxMjdaMEExGDAW
    BgNVBAMTD3d3dy5leGFtcGxlLmNvbTElMCMGCSqGSIb3DQEJARYWcG9zdG1hc3Rl
    ckBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAML2
    5wYHIL3abm4KO8tsapBZ7AEVVnnDhetEDU1TvgMs7Xr183sDp7sNP7Hg/3vDe6la
    cXV8WOSOXo7CGtTDr6r4XY9PnYK+dWU6uB0k+y4c++5SWefM8a8ASyzn/INIcySr
    x5jZ/gib7nWYNxqJzZUgjfxNtcXMSv6qqQJpZFvS+i0hAqZlbHzkC4vSZPqq9UDn
    jpU2wvX9tqEU/O6u6XeRAbsZly967PpOwsBevh201geH/8FZ7gUdl8/dn7l4ZoTF
    tnXoLWTbarYxMQh+ML4IU8KmchoaHhCloDS4YYeG/TVAFg2WzUdbJWnUjZaLz9Xs
    x3MZfX1M7TdvAFHgHf0CAwEAAaMaMBgwFgYDVR0RBA8wDYILZXhhbXBsZS5jb20w
    DQYJKoZIhvcNAQEFBQADggEBAFdDhY7cNBypP/F3+kcFXL/9Du/TVihTB6lD6Ljx
    jPxr/W/yF8wDTCfi1SEWElRfEArCkhjHqneoRzM0EZj54tPay1f6DF9VK9yLN7vv
    jKXP01rt1MArqHvk0YujwUA8VT16IQwaa3mJBUyC/RLazkrn/Pa526yVb7fe1gB/
    Q4vJOuTFPV6g7FF57zQxsC50gBbDCSrAGvdEdZtlmFXwBtvYcxJCjNbbc8yWs2xz
    2SHKNzxqwiEhQ+SoBKMzGN9aGKVTRCLgaA+ZlHaWRlCz8kkq/di7jDS6ohs0Xyts
    qhT86owpdcy81Sp1ohUYsYbjbgYrF6Z7sTkrtHZ+qdHohtw=
    -----END CERTIFICATE-----
    subject=/CN=www.example.com/[email protected]
    issuer=/CN=www.example.com/[email protected]
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 1374 bytes and written 255 bytes
    ---
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1
        Cipher    : DHE-RSA-AES256-SHA
        Session-ID: 2ED787CC1ABD979D19002CF241C9A897ECE0A9FFAA539AED30D05AFCC52A4342
        Session-ID-ctx: 
        Master-Key: F5AD4DFDDFC9D5E35BC509918D797A3F2CDAB26629B69E5B304870978C2576231F081FCE9E224A3FB369D7A7AF8F4A80
        Key-Arg   : None
        Start Time: 1343392406
        Timeout   : 300 (sec)
        Verify return code: 18 (self signed certificate)
    ---
    Еще один из способов оценить работу SSL - использовать online checker, например этот.


    Автор: Andrey Tataranovich
    27 июля 2012 г.
    http://blog.tataranovich.com/2012/07/workflow-ssl.html
     
    _________________________
Loading...