HTTPS на примере Apache2 (методическое пособие)
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://