Создание ECC-сертификата для Nginx (Debian 7)

Данное руководство демонстрирует установку открытого и закрытого ключей Elliptic Curve Cryptography (ECC) для Nginx, HTTP-сервера с высокой производительностью. ECC-ключи имеют несколько преимуществ по сравнению с традиционными ключами RSA. ECC-ключи обеспечивают безопасность на уровне, соответствующем объемным RSA-ключам, при этом будучи меньше по размеру, что, соответственно, уменьшает количество требуемых ресурсов сервера и повышает производительность для мобильных устройств.

Использование ECC может также повысить производительность для потоковой передачи мультимедиа, VPN-соединений или других приложений с высокой пропускной способностью. Центры сертификации (ЦС), такие как Symantec, начали предлагать сертификаты ECC (или Elliptic Curve Cryptography).  Это руководство подробно описывает действия, необходимые для развертывания самоподписанного закрытого ECC-ключа и открытого сертификата для Nginx в системе Debian Wheezy с помощью prime256v1.

Требования

  • Сервер Debian 7.0 Wheezy;
  • Установленный и обновленный OpenSSL.
  • Запустите:

apt-get update && apt-get upgrade

Выполнив установку и настройку необходимого ПО, рекомендуется перезапустить сервер.

  • Современный браузер (Internet Explorer 7+, Firefox 19+ или Chrome 25+). В данном руководстве используется Firefox.

Кроме того, все команды в данном руководстве необходимо выполнять через root-пользователя.

1: Установка Nginx

Установить Nginx можно при помощи менеджера пакетов apt-get. Nginx – это HTTP-сервер с выской производительностью, способный обрабатывать большое количество одновременных запросов, не требуя при этом большого объема памяти сервера. Чтобы подтвердить установку, введите Y, а затем нажмите Enter.

apt-get install nginx

2: Создание и подпись закрытого ECC-ключа

Создайте каталог для хранения закрытого ключа, запроса на подпись сертификата, а также сертификата сервера. Для этого рекомендуется создать /etc/nginx/ssl. Затем перейдите в каталог:

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

Создайте закрытый ECC-ключ при помощи инструмент OpenSSL’s ecparam. Данная команда создает 256-битовый ключ при помощи ECC-кривой prime256v1, а затем сохраняет ключ в файл privatekey.key. Такой 256-битовый ключ равен 2048-битовому закрытому ключу RSA.

openssl ecparam -out privatekey.key -name prime256v1 -genkey

Используйте OpenSSL, чтобы сгенерировать запрос на подпись сертификата.

openssl req -new -key privatekey.key -out csr.pem

После выполнения этой команды будет необходимо ответить на несколько вопросов. В строке Common Name не забудьте указать IP-адрес сервера или имя хоста. Поле challenge password оставьте пустым. Все остальные поля можно заполнить по собственному усмотрению.

You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
Organizational Unit Name (eg, section) []:ECC Certificate Test
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

Примечание: на этом этапе можно отправить свой сертификат на подпись в ЦС. В таком случае следуйте инструкциям, предоставленным выбранным центом сертификации. В настоящее время сертификаты ECC предлагает центр Symantec. Но в данном руководстве будет создан самостоятельно подписанный сертификат.

Создайте сертификат (или открытый ключ). Сертификат используется клиентом для шифрования данных, которые потом может прочитать только сервер. OpenSSL-инструмент X509 используется для создания собственного сертификата из запроса на подпись сертификата (CSR). Чтобы увеличить срок действия сертификата, нужно изменить значение опции -days (например, заменив 365 на 3650, получится сертификат, действительный в течение 10 лет).

openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem

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

chmod 600 /etc/nginx/ssl/*

3: Настройка Nginx

При помощи текстового редактора откройте конфигурации виртуального хоста Nginx. По умолчанию Nginx настроен на обслуживание только HTTP-запросов, но для корректной работы нужно, чтоб он обслуживал и HTTPS-запросы.

vi /etc/nginx/sites-enabled/default

В нижней части конфигурационного файла виртуального хоста Nginx по умолчанию можно найти простую конфигурацию для HTTPS-сервера, содержащую строку listen 443;. Раскомментируйте эти строки и отредактируйте блок HTTPS server в соответствии с показанным ниже примером. Будьте внимательны, поскольку придется редактировать большую часть строк этого раздела.

Изменяя значения, убедитесь, что в конце каждой строки поставлены точка с запятой.

#HTTPS server
#
server {
listen 443;
server_name Your IP Address or Hostname;
#
root /usr/share/nginx/www;
index index.html index.htm;
#
ssl on;
ssl_certificate /etc/nginx/ssl/certificate.pem;
ssl_certificate_key /etc/nginx/ssl/privatekey.key;
#
ssl_session_timeout 5m;
#
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
ssl_prefer_server_ciphers on;
#
location / {
try_files $uri $uri/ =404;
}
}

Отредактировав раздел HTTPS server должным образом, сохраните изменения.

Обратите внимание: блок HTTPS server может нуждаться в дополнительных изменениях в зависимости от существующих конфигураций сервера. Например, если облачный сервер работает на PHP, нужно скопировать параметры конфигурации PHP из раздела HTTP в блок HTTPS.

Перезапустите Nginx, чтобы применить изменения.

service nginx restart

4: Тестирование ECC-сертификата для Nginx

Для тестирования в данном руководстве используется Firefox, хотя любой другой современный веб-браузер будет работать должным образом.

Используйте Firefox, чтобы перейти к IP-адресу или имени хоста облачного сервера. После предупреждения о самоподписанном сертификате появится страница “Welcome to Nginx!”. Предупреждение о сертификате появится потому, что сертификат сервера является самозаверяющим и не был подписан центром сертификации, признанным в веб-браузере.

https://ip_или_имя_хоста/

Подтвердите сертификат.

При использовании Mozilla Firefox нажмите на замок рядом с префиксом https:// в адресной строке. Появится окно информации о подключении.

В этом окне нужно нажать на кнопку More Information. В новом окне под вкладкой Security нажмите на кнопку View Certificate. Выберите вкладку Details. Прокрутите вниз и выберите поле Algorithm Parameters. В текстовой области Field Value найдите текст, который включает elliptic curve prime256v1, что обозначает сертификат ECC.

Поле Subject’s Public Key покажет размер открытого ключа – 256 бит.

Готово! Теперь сервер Nginx защищен закрытым ключом ECC и ECC-сертификатом!

Tags: , , , , , , ,

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