certbot арқылы Auto SSL (Linux, nginx және Apache)
Auto SSL — серверіңіз ACME хаттамасы арқылы Sectigo DV-сертификаттарын өзі алып, өзі ұзартатын жазылым. Бұл мақалада — Linux (Ubuntu, Debian, AlmaLinux) жүйесінде nginx және Apache үшін certbot арқылы баптау. acme.sh қолданғыңыз келсе, жеке нұсқаулық бар.
Кілттерді қайдан алуға болады
- 1host.kz/bill жеке кабинетіне кіріп, «Auto SSL (Sectigo ACME)» қызметін ашыңыз. Жазылым әлі болмаса — Auto SSL бетінде рәсімдеңіз.
- «Configure Now» («Баптау») түймесін басыңыз. «Single Domains» өрісіне домендерді енгізіңіз (
example.kzжәнеwww.example.kz— бір домен).*.example.kzүшін «Wildcard Domains» өрісін пайдаланыңыз — бұл жеке позиция. - 5–30 секундтан кейін қызмет карточкасында төрт мән пайда болады: ACME account ID, EAB MAC ID, EAB MAC key, Server URL.
Төмендегі командаларда: Server URL — https://acme.sectigo.com/v2/DV (барлық клиенттер үшін бірдей), YOUR_EAB_KID — EAB MAC ID өрісінің мәні, YOUR_EAB_HMAC_KEY — EAB MAC key өрісінің мәні. Кілттер — құпиясөз сияқты: оларды жарияламаңыз. Сертификат тек жазылымға қосылған домендерге беріледі.
Не қажет
- root немесе sudo қолжетімділігі бар сервер.
- Доменнің (және
www) A-жазбасы осы серверге бағытталған. - 80-порт сырттан ашық — КО доменді сол арқылы тексереді (http-01).
- certbot 1.3 немесе жаңарақ нұсқасы: EAB қолдауы сол нұсқада пайда болды. Біз certbot 4.0-де тексердік.
certbot орнату
Ubuntu / Debian:
sudo apt update
sudo apt install certbot python3-certbot-nginx # nginx үшін
sudo apt install certbot python3-certbot-apache # Apache үшін
AlmaLinux / Rocky / CentOS Stream:
sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx python3-certbot-apache
Репозиторийдегі нұсқа ескі болса, snap арқылы жаңасын орнатыңыз: sudo snap install --classic certbot. Нұсқаны тексеру: certbot --version.
Сертификат шығару
Аккаунтты бөлек тіркеудің қажеті жоқ: алғашқы іске қосқанда certbot оны EAB кілттері бойынша өзі жасайды. Біз тексерген webroot нұсқасы (веб-сервер /.well-known/acme-challenge/ беретін каталог):
sudo mkdir -p /var/www/acme
sudo certbot certonly --webroot -w /var/www/acme -d example.kz -d www.example.kz \
--server https://acme.sectigo.com/v2/DV \
--eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
--email [email protected] --agree-tos --no-eff-email
webroot үшін nginx-тің 80-порт конфигінде мынадай блок болуы керек:
location /.well-known/acme-challenge/ {
root /var/www/acme;
}
certbot веб-сервер конфигін өзі түзетіп, сертификатты қосқанын қаласаңыз, certonly --webroot -w /var/www/acme орнына плагин қолданыңыз:
# nginx
sudo certbot --nginx -d example.kz -d www.example.kz \
--server https://acme.sectigo.com/v2/DV \
--eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
--email [email protected] --agree-tos --no-eff-email
# Apache
sudo certbot --apache -d example.kz -d www.example.kz \
--server https://acme.sectigo.com/v2/DV \
--eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
--email [email protected] --agree-tos --no-eff-email
Шығару шамамен 20 секунд алады. Аккаунт /etc/letsencrypt/accounts/acme.sectigo.com/ ішінде сақталады, сондықтан келесі шығару мен ұзартуларда EAB кілттерін көрсетудің қажеті жоқ — --server жеткілікті. Жазылымдағы бірнеше доменді бір сертификатқа қосу үшін оларды -d арқылы тізіп шығыңыз; әрқайсысы осы серверге бағытталуы тиіс.
Сертификат файлдары және қосу
Файлдар /etc/letsencrypt/live/example.kz/ ішінде: fullchain.pem (тізбегі бар сертификат) және privkey.pem (жабық кілт). certonly арқылы шығарған болсаңыз, оларды конфигте өзіңіз көрсетіңіз:
# nginx
ssl_certificate /etc/letsencrypt/live/example.kz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.kz/privkey.pem;
# Apache
SSLCertificateFile /etc/letsencrypt/live/example.kz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.kz/privkey.pem
Ұзартудан кейін веб-сервер жаңа сертификатты алуы үшін қайта жүктеу хугін бір рет қосыңыз (certbot оны ұзарту конфигінде сақтайды):
sudo certbot renew --deploy-hook "systemctl reload nginx"
Сол файлдарды пошта серверіне, панельге немесе басқа қызметке де қосуға болады — серверлік лицензия шектелмеген.
Типтік қателер
- Тексеру кезінде Connection refused / Timeout — 80-порт фаерволмен жабық немесе домен серверге бағытталмаған.
dig +short example.kzжәнеcurl -I http://example.kz/.well-known/acme-challenge/testарқылы тексеріңіз. - Авторизация қатесі немесе КО тапсырысты қабылдамайды — домен жазылымда жоқ. Оны кабинетте қосыңыз («Add domain»), қажет болса қосымша сатып алыңыз («Buy more domains»).
- unrecognized arguments: --eab-kid — certbot ескі. snap арқылы жаңартыңыз.
- Жазылым белсенді емес — ұзарту шоты төленгенше жаңа сертификаттар шығарылмайды (шот мерзім аяқталардан 14 күн бұрын қойылады). Бұрын берілген сертификаттар мерзімі біткенше жұмыс істейді.
Тексеру және ұзарту
Сайттың Sectigo сертификатын беретініне көз жеткізіп, жарамдылық мерзімін қараңыз:
echo | openssl s_client -connect example.kz:443 -servername example.kz 2>/dev/null \
| openssl x509 -noout -issuer -dates
sudo certbot certificates
issuer жолында O = Sectigo Limited болуы керек. Ұзартуды certbot-тың штаттық таймері жасайды: ол күніне екі рет іске қосылып, 30 күннен аз қалған сертификаттарды жаңартады. Таймердің белсенді екенін және ұзартудың қатесіз өтетінін тексеріңіз:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
systemd орнына cron қолданылса, тапсырма /etc/cron.d/certbot ішінде. Басқа ештеңе істеудің қажеті жоқ: жазылым белсенді болғанда сертификаттар өздігінен ұзартылады. Бірдеңе шықпаса, жеке кабинеттен ONEHOST қолдау қызметіне жазыңыз — тәулік бойы баптауға көмектесеміз.