Как показывает практика, использование ECDSA сертификатов позволяет добиться примерно в два раз большего количества соединений на одной аппаратной платформе. К недостаткам использования ECDSA сертификатов следует отнести проблему с поддержкой браузерами. Но данная проблема легко решается если мы будем использовать ECDSA и RSA сертификаты одновременно.
Перед тем как начать проверьте, что в системе установлен git
, в противном случае необходимо запустить установку командой:
apt-get install git
Выберите каталог, в который будут загружены файлы клиента Let’s Encrypt. В этой статье я буду использовать каталог /usr/local
. Переходим в указанный каталог, а затем загружаем и запускаем клиент Let’s Encrypt:
cd /usr/local git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt ./letsencrypt-auto --help
Последняя команда установит все необходимые пакеты и выведет справочную информацию для работы с клиентом. Далее вам нужно создать каталог для файлов ключа и сертификата домена:
mkdir -p /usr/local/letsencrypt/live-ecdsa/codebeer.ru/letmp
Перед тем как создать файл ключа, важно правильно выбрать тип кривой. Большинство современных браузеров поддерживает кривые secp256r1
, secp384r1
, secp521r1
. Я буду использовать 256-битная кривую prime256v1
, которая по современным меркам обеспечивает достаточной секретности. Список кривых OpenSSL можно вывести командой:
openssl ecparam -list_curves
Создаем приватный ключ:
cd /usr/local/letsencrypt/live-ecdsa/codebeer.ru openssl ecparam -genkey -name secp256r1 > key-256r1.pem
Теперь создаем свой CSR:
openssl req -new -sha256 -key key-256r1.pem -subj "/CN=codebeer.ru" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:codebeer.ru,DNS:www.codebeer.ru")) -outform der -out csr-256r1.der
Переходим в каталог letmp
и создаем ECDSA Let’s Encrypt сертификат:
cd letmp /usr/local/letsencrypt/letsencrypt-auto certonly -a webroot --email webmaster@codebeer.ru --webroot-path /www/codebeer.ru/ --csr /usr/local/letsencrypt/live-ecdsa/codebeer.ru/csr-256r1.der --renew-by-default --agree-tos
Если вы используете веб-сервер Nginx, то во время создания сертификата клиент Let’s Encrypt вы можете получить такую ошибку:
Failed authorization procedure. www.codebeer.ru (http-01): urn:acme:error:unauth orized :: The client lacks sufficient authorization :: Invalid response from htt p://www.codebeer.ru/.well-known/acme-challenge/oVRUfF1DISR8zRpq1Vju4C7XrYm2YULSe 5TVRfmGy64: "<html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>", codebeer.ru (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://codebeer.ru/.well -known/acme-challenge/yKovcd-Eemc6ezWUWNKiL3MKgs6htk06lfuQmYeBwdA: "<html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>" IMPORTANT NOTES: - The following errors were reported by the server: Domain: www.codebeer.ru Type: unauthorized Detail: Invalid response from http://www.codebeer.ru/.well-known/acme-challenge/oVRUfF1DISR8zRpq1Vju4C7XrYm 2YULSe5TVRfmGy64: "<html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>" Domain: codebeer.ru Type: unauthorized Detail: Invalid response from http://codebeer.ru/.well-known/acme-challenge/yKovcd-Eemc6ezWUWNKiL3MKgs6htk0 6lfuQmYeBwdA: "<html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>" To fix these errors, please make sure that your domain name was entered correctly and the DNS A record(s) for that domain contain(s) the right IP address.
В этом случае вам нужно добавить в конфиг виртуального следующие строки:
location ~ /.well-known { allow all; }
Если все прошло успешно, в каталоге letmp
появятся следующие файлы:
0000_cert.pem 0000_chain.pem 0001_chain.pem
Копируем их содержимое в один файл:
cat 0001* > /usr/local/letsencrypt/live-ecdsa/codebeer.ru/chain.pem
Теперь необходимо указать путь к сертификату и ключу в конфиге nginx:
ssl_certificate /usr/local/letsencrypt/live-ecdsa/codebeer.ru/chain.pem; ssl_certificate_key /usr/local/letsencrypt/live-ecdsa/codebeer.ru/key-256r1.pem;