# Сертификаты Lets Encrypt на старых серверах

Источник: https://blog.xsk.in/it/linux-it/sertifikaty-lets-encrypt-na-stary-h-serverah/1020/
Опубликовано: 2018-04-09 · Рубрики: Linux, nginx


Благодаря Let's Encrypt, стало гораздо проще получать сертификаты для доменов и уверенно двигаться в ногу со временем навстречу HTTP/2. Несколько тормозит прогресс наличие огромного количества необновляемых в силу ряда причин серверов под управлением старых операционных систем. Не будем вдаваться в моральные и прочие аспекты обслуживания этого разношерстного зоопарка, в рамках данной статьи рассмотрим, как условно безболезненно получать и обновлять сертификаты для доменов на таких железках.

Итак, пытаясь установить [certbot](http://certbot.eff.org/) на систему типа debian 6, можно столкнуться с очень старыми версиями требуемых зависимостей (хотя бы тот же python 2.6)
[![](/wp-content/uploads/2018/04/debian-squeeze-python.png)](/wp-content/uploads/2018/04/debian-squeeze-python.png)

Вероятно, можно перенести половину софта из других реп или наколдовать из исходников, но одним из решений является проксирование нескольких запросов к домену на другой сервер (с более свежими версиями операционных систем) и перекладывание получаемых сертификатов назад. Данный способ не является единственно верным и возможно вообще вредный. Ну в общем, как всегда, делайте на свой страх и риск. Я предупредил ;-)

При проверке принадлежности домена необходимо разрешить запись в папке, которая будет смотреть по ссылке **domain**/.well-known/. В обычном случае делаем в конфиге nginx что-то вроде

```
location ~* ^/.well-known {
root /var/www/certs;
}
```

а потом указываем скрипту путь до этой папки при первоначальном запуске
`/home/certbot-auto certonly --webroot -w /var/www/certs -d domain`

Наш сервер не может самостоятельно получить сертификат, поэтому делаем проксирование на другой сервер

```
		location ~* ^/.well-known {
proxy_pass http://ip.from.new.server:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
```

а путь до папки делаем уже на новом сервере. Собственно и запуск скрипта тоже осуществляем на свежем сервере. Он положит необходимые файлы в папку, которая будет доступна через спроксированный локейшн со старого сервера.

Далее необходимо взять fullchain.pem и privkey.pem и перенести на наш целевой старенький сервачок. Можно делать это руками раз в 90 дней (лучше конечно заранее). А можно автоматизировать скриптом вроде такого

```
domain="ВСТАВИТЬ ДОМЕН"
host_ip="ВСТАВИТЬ IP"

ssl_remote_dir="/etc/ssl/$domain"
ssl_local_dir="/etc/letsencrypt/live/$domain"

scp -r $ssl_local_dir/ $host_ip:/tmp/
ssh $host_ip 'cp /tmp/'$domain'/fullchain.pem '$ssl_remote_dir'/ ; cp /tmp/'$domain'/privkey.pem '$ssl_remote_dir'/ ; nginx -s reload'
```

Правда надо будет еще ключи добавить для ssh авторизации на целевом сервере, для этого необходимо сделать `ssh-copy-id IP-старого-сервера` (если ключей еще не делали, `ssh-keygen` &lt;Нажать enter N раз>)

P.S. таким образом можно собрать в одном месте на свежем сервере сертификато-продлеватель для большого числа "старых" серверов. Для этого нужно опустить директиву server\_name на свежем сервере и для всех доменов указывать одну и ту же папку (получается default\_server с неограниченным количеством спроксированных доменов).

