Как показывает практика, использование 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;