HTTPS на примере Apache2 (методическое пособие) — различия между версиями

Материал из wiki
Перейти к: навигация, поиск
(SSL сертификат)
(TLS/SSL)
Строка 3: Строка 3:
  
 
== TLS/SSL ==
 
== TLS/SSL ==
HTTPS это протокол HTTP используемый поверх шифрованного канала TLS или SSL. Стандартный порт 443.
+
HTTPS это протокол HTTP используемый поверх шифрованного канала TLS или SSL. Стандартный порт 443.
  
 
= SSL сертификат =
 
= SSL сертификат =

Версия 11:58, 26 февраля 2014

HTTPS

PKI

TLS/SSL

HTTPS это протокол HTTP используемый поверх шифрованного канала TLS или SSL. Стандартный порт 443.

SSL сертификат

Для протокола SSL на стороне сервера нам требуется сертификат X.509 на конкретное доменное имя и соответствующий закрытый ключ. Доменное имя должно быть указано в поле Subject сертификата в графе CN. Для указания множества имен используется поле subjectAltName. Имя домена должно указываться в том виде, в каком оно используется в ссылках на сайт. В нашем примере это будет доменное имя "www.model.local".

Для внутрикорпоративного использования, в простейшем случае, нам потребуется самостоятельно создать сертификат для доменного имени.

Если сертификатов требуется несколько - разумно создать Удостоверяющий Центр, сгенерировать корневой сертификат и им подписывать сертификаты сайтов. На компьютеры клиентов придется устанавливать корневой сертификат.

Если сертификат требуется один - можно создать самоподписанный сертификат для сайта сразу. На компьютеры клиентов придется устанавливать этот сертификат.

Создаем простой Самоподписанный Сертификат и ключ для доменного имени www.model.local со сроком действия 1024 дня с ключом RSA 2048 бит.

Воспользуемся пакетом openssl. Часть параметров указывается в командной строке, часть в режиме диалога, прочие параметры заданы в /etc/ssl/openssl.cnf

root@model-net-ctrl-1:~/ssltest# openssl req -x509 -nodes -days 1024 -newkey rsa:2048 -keyout web_key.pem -out web_cert.pem
Generating a 2048 bit RSA private key
writing new private key to 'web_key.pem'
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Permsky Krai
Locality Name (eg, city) []:Perm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PSNRU
Organizational Unit Name (eg, section) []:KOIBAS
Common Name (e.g. server FQDN or YOUR name) []:www.model.local
Email Address []:ru@model.local

В текущем каталоге будут созданы файл сертификат и файл ключ. На файл ключа необходимо поставить доступ только на чтение и только пользователю, который будет шифровать.

-rw-r--r-- 1 root root 1424 Feb 26 12:23 web_cert.pem
-rw-r--r-- 1 root root 1704 Feb 26 12:23 web_key.pem
root@model-net-ctrl-1:~/ssltest# chmod 0400 web_key.pem

Проверить параметры сертификата можно следующей командой

root@model-net-ctrl-1:~/ssltest# openssl x509 -in ./web_cert.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9676869248984892495 (0x864b254fcba5444f)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Permsky Krai, L=Perm, O=PSNRU, OU=KOIBAS, CN=www.model.local/emailAddress=ru@ru.ru
        Validity
            Not Before: Feb 26 06:49:43 2014 GMT
            Not After : Dec 16 06:49:43 2016 GMT
        Subject: C=RU, ST=Permsky Krai, L=Perm, O=PSNRU, OU=KOIBAS, CN=www.model.local/emailAddress=ru@ru.ru
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b6:39:4e:10:41:b4:e8:b1:17:87:e0:3f:61:3f:
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                FC:42:EF:CE:C0:B8:33:19:1A:AE:48:12:76:AD:E8:4D:75:A2:B0:2D
            X509v3 Authority Key Identifier:
                keyid:FC:42:EF:CE:C0:B8:33:19:1A:AE:48:12:76:AD:E8:4D:75:A2:B0:2D
            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
         6f:19:9e:f1:11:bc:fe:2d:3a:05:01:a3:5c:e3:97:03:e3:e7:

Как видим, subject и issuer совпадают, поле CA=TRUE, значит это самоподписанный корневой сертификат.

Apache2

По-умолчанию шаблон конфигурации сайта для SSL лежит в /etc/apache2/sites-available/default-ssl. Корневой каталог сайта /var/www.

Для запуска SSL необходимо включить соответствующий модуль.

a2enmod ssl

Теперь в конфигурации сайта (/etc/apache2/sites-available/default-ssl) указываем путь к сертификату и закрытому ключу

        SSLCertificateFile    /etc/apache2/ssltest/web_cert.pem
        SSLCertificateKeyFile /etc/apache2/ssltest/web_key.pem

Включаем наш сайт, проверяем конфиг и перезапускаем Apache2.

a2ensite defaul-ssl
apache2ctl configtest
apache2ctl restart

Если все сделано правильно, новый сайт будет доступен по адресу https://www.model.local.

Настройка браузера

При открытии сайта браузер будет выдавать сообщение об ошибке сертификата, т.к. издатель сертификата не является доверенным.

Чтобы браузер стал доверять нашему сертификату, необходимо его поместить в хранилище доверенных.

Для этого надо открыть сайт. В предупреждении о сертификате выбрать подробные сведения. Открывшийся сертификат сохранить в файл на диске. Браузер необходимо закрыть.

Запустить файл с сертификатом с диска. При помощи Мастера импорта сертификатов поместить сертификат в хранилище Доверенные Корневые ЦС.

Заново открыть сайт в браузере. На этот раз сайт должен открыться без предупреждений по защищенному каналу.

Следите за тем, чтобы на защищаемом сайте все ссылки имели вид https://