установка https для сайта letsencrypt ssl сертификат nginx debian 8 ispmanager-5-lite

  1. заходим на сайт https://github.com/Neilpang/acme.sh/wiki/How-to-install

Для меня подошел 1-й способ( вводим в консоли):

wget -O -  https://get.acme.sh | sh

2. Если все установилось корректно, перезапускаем терминал.

 

 

Сформировать файл dhparam.pem
Вы должны использовать Diffie-Hellman (DH) группу, независимо от программного обеспечения сервера. Самый простой способ создания новую группу, является использование OpenSSL. Введите следующую команду, чтобы создать файл dhparam.pem:

Я предлагаю вам создать 4096-битовую группу:

Ждем пока консоль отработает и создастся файл dhparams.pem (ждем…)

Выпуск сертификата для домена domain.ru

Example 2: Multiple domains in the same cert.

acme.sh --issue -d aa.com -d www.aa.com -d cp.aa.com -w /home/wwwroot/aa.com

The parameter /home/wwwroot/aa.com is the web root folder. You MUST have write access to this folder.

Second argument «aa.com» is the main domain you want to issue cert for. You must have at least a domain there.

You must point and bind all the domains to the same webroot dir: /home/wwwroot/aa.com.

Generate/issued certs will be placed in ~/.acme.sh/aa.com/

The issued cert will be renewed every 80 days automatically.

 

для этого пришлось почитать тут https://github.com/Neilpang/acme.sh/blob/master/README.md

и оказалось все проще. Т.к. в старых мануалах написана уже устаревшая информация и по ней естественно установить сертификаты не получалось.

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

3. Install the issued cert to Apache/Nginx etc.

After you issue a cert, you probably want to install/copy the cert to your Apache/Nginx or other servers. You MUST use this command to copy the certs to the target files, DO NOT use the certs files in ~/.acme.sh/ folder, they are for internal use only, the folder structure may change in the future.

Суть в том что в первый раз не совсем правильно были установлены сертификаты для сервера. Для корректной установки используем примеры, т.е. создаются копии файлов сертификатов в назначенных папках. Соответственно в конфиг сервера прописываем указанные пути а не пути начинающиеся с ~/.acme.sh/

Apache example:

acme.sh --installcert -d example.com \
--certpath      /path/to/certfile/in/apache/cert.pem  \
--keypath       /path/to/keyfile/in/apache/key.pem  \
--fullchainpath /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 restart"

Nginx example:

acme.sh --installcert -d example.com \
--keypath       /path/to/keyfile/in/nginx/key.pem  \
--fullchainpath /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx restart"

Only the domain is required, all the other parameters are optional.

Install/copy the issued cert/key to the production Apache or Nginx path.

 

Так же рекомендуется обновлять автоматически скрипт

11. How to upgrade acme.sh

acme.sh is in constant developement, so it’s strongly recommended to use the latest code.

You can update acme.sh to the latest code:

acme.sh --upgrade

You can also enable auto upgrade:

acme.sh --upgrade --auto-upgrade

Then acme.sh will be kept up to date automatically.

Disable auto upgrade:

acme.sh --upgrade --auto-upgrade 0

Ну и настраиваем конфиг nginx для вашего домена

Приведу свой конфиг в качестве примера (для opencart 1.5)

301 редиректы нужны если сайт был до этого без https

!!! 16 02 2017   сертификат почему то не обновился и сайт упал(

Вылезла ошибка что сервер не может получить доступ к файлу проверки сертификата:

Корень_сайта/.well-known/acme-challenge/имя_проверочного_файла_без_расширения

Сервер возвращал ответ 403 forbidden

Пришлось в конфиге перед секцией

location ~ /\. { deny all; }

 

Вставить:

location ~ /.well-known {
allow all;
}

После этого конфиг сохранить и перезагрузить nginx

service nginx reload

А затем срочно обновить сертификаты командой:

.acme.sh/acme.sh —renew-all

После чего все заработало! Но утро убилось на поиск данной проблемы и ее решение(

Поэтому на всякий случай заходим на сайт https://www.sslshopper.com/ssl-checker.html

Проверяем сертификат и ставим напоминалку за 5 дней до окончания срока сертификата, если письмо пришло и серт. не обновился, тогда будем копать дальше и искать причину, почему он не обновляется автоматом! Хотя должен каждые 80 дней обновляться!

13.05.2017 Сертификат обновился, НО браузеры отображают старый сертификат, который через пять дней станет недействительным!

Решил проверить как сработает автообновление и продление сертификата и обнаружил, что файл сертификата лежит на сервере новый, но браузеры его почему то не видят. УДалил все куки, кэши, заходил под гостем и инкогнито, но все та же петрушка. Показывает что срок действия сертификата через 5 дней истекает! Перерыл все статьи на эту тему, И опять таки понял что надо внимательнее читать документацию (официальную). Но и писать надо документацию подробнее:)

А дело все было в том что после обновления сертификата сервер НУЖНО перезапустить!!!

Команда для nginx:

service nginx force-reload

В итоге нужно было изначально устанавливать сертификат как написано на гитхабе:

acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"

После такой установки создается специальный конфиг для домена, где явно прописывается что после обновления сертификата по крон заданию , сервер необходимо плавно перезагрузить!

ТАк же всегда можно добавить параметр —reloadcmd уже на работающий сайт просто в консоли набрав:

acme.sh --install-cert -d example.com \
--reloadcmd     "service nginx force-reload"

Теперь крон задание будет работать исправно! Надеюсь) Напоминалку поставил на всякий случай, через 3 месяца посмотрим!

09.07.2017 Сертификат опять не обновился( На этот раз дело оказалось в dns записи AAAA, а именно у домена была указан ipv6, но сервер на работу с айпив6 настроен не был. И за этого сертификат выдавал ошибку обновления, хотя до этого обновлялся… АААА записи пришлось убрать и все вроде заработало. Ждем очередного сюрприза через 60 дней:) Всем добра!:)

В итоге конфиг получился следующим:

#user 'domain' virtual host 'domain.ru' configuration file

# 301 Redirect www to non-www
#server {
# listen ваш_ipv4_адрес:80;
# listen [::]:80 ;
# server_name www.domain.ru;
# return 301 $scheme://domain.ru$request_uri;
# include /etc/nginx/vhosts-resources/domain.ru/*.conf;
#}

# 301 Redirect http to https
server {
 listen ваш_ipv4_адрес:80;
 listen [::]:80 ;
 server_name domain.ru www.domain.ru;
 return 301 https://domain.ru$request_uri;
}


# 301 Redirect www to non-www (HTTPS)
server {
 listen ваш_ipv4_адрес:443;
 server_name www.domain.ru;
 
 ssl on;
 ssl_certificate "/root/.acme.sh/domain.ru/fullchain.cer";
 ssl_certificate_key "/root/.acme.sh/domain.ru/domain.ru.key";
 
 return 301 $scheme://domain.ru$request_uri;
}


server {
 server_name domain.ru www.domain.ru;
 charset UTF-8;
 disable_symlinks if_not_owner from=$root_path;
 gzip on;
 gzip_comp_level 5;
 index index.html index.php;
 root $root_path;
 set $root_path /var/www/domain/data/www/domain.ru;
 access_log /var/www/httpd-logs/domain.ru.access.log ;
 error_log /var/www/httpd-logs/domain.ru.error.log notice;
 include /etc/nginx/vhosts-includes/*.conf;

# LetsEncrypt
 # location ~ /.well-known/acme-challenge/(.*)
 # {
 # default_type "text/plain";
 #root /tmp/letsencrypt/public_html;
 #root /var/www/html/.well-known/acme-challenge;
 #root /var/www/html;
 # }



 location / { try_files $uri @opencart; }

 location @opencart { rewrite ^/(.+)$ /index.php?_route_=$1 last; }
 
 #location = /sitemap.xml {
 # try_files $uri /image/no_image.jpg;
 # #rewrite ^(.*)$ /index.php?_route_=feed/google_sitemap break;
 # 
 #}

 #if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?_route_=$1 last; }
 
 location /admin { index index.php; } 

 location ~* .(js|css|ico|xml|swf|flv|eot|ttf|woff|pdf|xls|htc)$ {
 add_header Pragma "public";
 add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 access_log off;
 log_not_found off;
 expires 90d;
 }
 
 location ~* .(jpg|jpeg|gif|css|png)$ {
 access_log off;
 expires 10d;
 }
 
 autoindex off;
 
 location = /sitemap.xml {rewrite ^/(.+)$ /index.php?route=feed/fast_sitemap last;}
 #location = /sitemap.xml {rewrite ^/(.+)$ /index.php?route=feed/google_sitemap last;}
 #location = /sitemap.xml {try_files $uri @sitemap;}
 #location @sitemap {rewrite ^/(.+)$ /index.php?route=feed/google_sitemap last;}
 
 #location = /sitemap.xml {
 # try_files $uri /index.php?route=feed/google_sitemap;
 # #rewrite ^(.*)$ /index.php?route=feed/google_sitemap break;
 #}
 
 location = /googlebase.xml {
 rewrite ^(.*)$ /index.php?route=feed/google_base last;
 }
 
 location /download {
 rewrite ^/download/(.*) /index.php?route=error/not_found break;
 }
 
 location ~ \.(tpl|ini|log) {
 deny all;
 }

location ~ /.well-known {
allow all;
}

 location ~ /\. { deny all; }
 location = /favicon.ico { }
 location = /robots.txt { }


# location @php {
 location ~ \.php$ {
 fastcgi_index index.php;
 fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@domain.ru";
 fastcgi_pass unix:/var/www/php-fpm/domain.sock;
 fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
 try_files $uri =404;
 include fastcgi_params;
 } 



 ssi on;
 listen ваш_ipv4_адрес:443;
 ssl on;
 ssl_certificate "/root/.acme.sh/domain.ru/fullchain.cer";
 ssl_certificate_key "/root/.acme.sh/domain.ru/domain.ru.key";
 
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_dhparam /etc/nginx/ssl/domain.ru/dhparams.pem;

 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 
 ssl_session_timeout 1d;
 ssl_session_cache shared:SSL:50m;
 ssl_stapling on;
 ssl_stapling_verify on;
 add_header Strict-Transport-Security max-age=15768000;

 
#
# ssl_client_certificate "/var/www/httpd-cert/domain/origin-pull-ca.pem";
# ssl_verify_client on;
}











server {
 listen ваш_ipv4_адрес:80;
 listen [::]:80 ;
 server_name domain.ru www.domain.ru;
 charset UTF-8;
 disable_symlinks if_not_owner from=$root_path;
 index index.html index.php;
 root $root_path;
 set $root_path /var/www/domain/data/www/domain.ru;
 access_log /var/www/httpd-logs/domain.ru.access.log ;
 error_log /var/www/httpd-logs/domain.ru.error.log notice;
 include /etc/nginx/vhosts-includes/*.conf;
 include /etc/nginx/vhosts-resources/domain.ru/*.conf;

 # location / {
 # location ~ [^/]\.ph(p\d*|tml)$ {
 # try_files /does_not_exists @php;
 # }
 # }

# LetsEncrypt
# location ~ /.well-known/acme-challenge/(.*)
 # { 
 #default_type "text/plain";
 #try_files $uri /;
 #root /var/www/html/.well-known/acme-challenge;
 #root /var/www/html;
# allow all;
# }


location / { try_files $uri @opencart; }

 location @opencart { rewrite ^/(.+)$ /index.php?_route_=$1 last; }
 
 #location = /sitemap.xml {
 # try_files $uri /image/no_image.jpg;
 # #rewrite ^(.*)$ /index.php?_route_=feed/google_sitemap break;
 # 
 #}

 #if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?_route_=$1 last; }
 
 location /admin { index index.php; } 

 location ~* .(js|css|ico|xml|swf|flv|eot|ttf|woff|pdf|xls|htc)$ {
 add_header Pragma "public";
 add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 access_log off;
 log_not_found off;
 expires 90d;
 }
 
 location ~* .(jpg|jpeg|gif|css|png)$ {
 access_log off;
 expires 10d;
 }
 
 autoindex off;
 
 location = /sitemap.xml {rewrite ^/(.+)$ /index.php?route=feed/fast_sitemap last;}
 #location = /sitemap.xml {rewrite ^/(.+)$ /index.php?route=feed/google_sitemap last;}
 #location = /sitemap.xml {try_files $uri @sitemap;}
 #location @sitemap {rewrite ^/(.+)$ /index.php?route=feed/google_sitemap last;}
 
 #location = /sitemap.xml {
 # try_files $uri /index.php?route=feed/google_sitemap;
 # #rewrite ^(.*)$ /index.php?route=feed/google_sitemap break;
 #}
 
 location = /googlebase.xml {
 rewrite ^(.*)$ /index.php?route=feed/google_base last;
 }
 
 location /download {
 rewrite ^/download/(.*) /index.php?route=error/not_found break;
 }
 
 location ~ \.(tpl|ini|log) {
 deny all;
 }

location ~ /.well-known {
allow all;
}
 location ~ /\. { deny all; }
 location = /favicon.ico { }
 location = /robots.txt { }


# location @php {
 location ~ \.php$ {
 fastcgi_index index.php;
 fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@domain.ru";
 fastcgi_pass unix:/var/www/php-fpm/domain.sock;
 fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
 try_files $uri =404;
 include fastcgi_params;
 }
 ssi on;
 gzip on;
 gzip_comp_level 5;

 #listen ваш_ipv4_адрес:8019;
}

 

 

Использовался материал(но уже старый): https://system-admins.ru/kak-v-nginx-nastroit-besplatnyj-letsencrypt-ssl-sertifikat-na-debian-ili-ubuntu-linux/

Добавить комментарий