Как создать сертификат ECC в Nginx для Debian 7

Вступление

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

Использование ECC может повысить производительность потокового мультимедиа, VPN-подключений или других приложений с высокой пропускной способностью. Центры сертификации (CA), такие как Symantec, начали предлагать сертификаты ECC или E lliptic C urve C ryptography. Если вы подключились к веб-сайту до использования прямой секретности или совершенной прямой секретности, вы использовали криптографию с эллиптической кривой! В этом руководстве подробно описаны шаги, необходимые для развертывания самозаверяющего закрытого ключа ECC и открытого сертификата с Nginx в системе Debian Wheezy с использованием кривой * prime256v1 *.

  • Примечание: * Существует множество различных кривых, которые вы можете использовать. Мы используем кривую prime256v1 ради простоты этой статьи.

Требования

  • Капли с * Debian 7.0 Wheezy *.

  • OpenSSL установлен и обновлен.

Run:

   apt-get update && apt-get upgrade

После обновления рекомендуется перезагрузить Droplet.

  • Современный браузер: Internet Explorer 7+ (Windows Vista, Windows 7), Firefox 19+ (Linux, Mac, Windows) или Chrome 25+ (Android, Linux, Mac, Windows). Мы будем использовать Firefox для тестирования в этом руководстве.

  • Все команды ниже должны выполняться от имени пользователя root. *

Шаг 1: Установите Nginx

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

apt-get install nginx

Шаг 2. Создайте и подпишите закрытый ключ ECC

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

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

Сгенерируйте закрытый ключ ECC, используя инструмент * ecparam * OpenSSL. Эта команда генерирует 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-адрес вашего сервера или имя хоста. * Не * укажите пароль для вызова. Все остальные поля могут быть заполнены информацией по вашему усмотрению.

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) []:
Email Address []:

Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
  • Примечание: * На данный момент вы можете отправить свой сертификат в орган для подписания. Следуйте инструкциям, предоставленным выбранным центром сертификации. В настоящее время Symantec предлагает сертификаты ECC, и ожидается, что в будущем большее количество центров сертификации будет предлагать сертификаты ECC. Для целей данного руководства вместо этого будет создан самозаверяющий сертификат.

Создайте сертификат или открытый ключ. Сертификат используется клиентом для шифрования данных, которые может прочитать только сервер. Инструмент 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 с ключом ECC и сертификатом

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

vi /etc/nginx/sites-enabled/default

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

  • При изменении значений обязательно оставляйте точку с запятой (;) в конце каждой строки. *

#HTTPS server
#
server {
   listen 443;
   server_name ;
#
   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-сервера совпадет с приведенным выше примером, сохраните изменения.

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

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

service nginx restart

Шаг 4: Тест Nginx с ECC

Мы будем использовать Firefox для тестирования, хотя любой современный веб-браузер будет работать для посещения вашего сайта и использования шифрования ECC.

Используйте Firefox для просмотра IP-адреса или имени хоста вашего облачного сервера. После принятия предупреждения о самозаверяющем сертификате вы должны увидеть страницу «Добро пожаловать в nginx!». Вы получите предупреждение о сертификате, поскольку сертификат сервера был самоподписанным и не был подписан центром сертификации, распознаваемым вашим веб-браузером.

https: // IPORHOSTNAME [https: // IP ИЛИ HOSTNAME]

Смотрите начальное предупреждение ниже:

изображение: https: //assets.digitalocean.com/articles/ECC_Nginx/1.jpg [Информация о сертификате Firefox]

Принять сертификат.

Если вы используете Mozilla Firefox, нажмите на замок рядом с префиксом * https: // * в адресной строке. Откроется окно информации о соединении.

изображение: https: //assets.digitalocean.com/articles/ECC_Nginx/2.jpg [Информация о подключении Firefox]

Нажмите на кнопку * Подробнее …​ *. В новом окне на вкладке * Безопасность * нажмите кнопку * Просмотреть сертификат *. Выберите вкладку * Подробно *. Прокрутите вниз и выберите поле * Параметры алгоритма *. В текстовой области * Field Value * ниже вы должны увидеть текст, включающий * эллиптическую кривую prime256v1 *, которая указывает сертификат ECC.

изображение: https: //assets.digitalocean.com/articles/ECC_Nginx/3.jpg [Просмотр сертификатов Firefox]

Поле * Открытый ключ субъекта * покажет размер открытого ключа 256 бит.

изображение: https: //assets.digitalocean.com/articles/ECC_Nginx/4.jpg [Просмотр сертификатов Firefox]

Поздравляем! Ваш сервер Nginx теперь настроен с закрытым ключом ECC и сертификатом!

Related