@leili

Как правильно установить Let’s Encrypt, если Nginx — балансировщик, а сам сайт на IIS?

Я 4 дня гуглю в поисках информации по получению сертификата Let's Encrypt. Для получения сертификата сайт должен быть доступен снаружи.
У меня так: сайт на IIS под Windows Server 2008, доступен для внутренней сети, балансировщик на Nginx под Ubuntu 12.04 (не бейте, что досталось, то досталось), там в /etc/nginx/conf.d лежат множество конфигов для разных поддоменов типа 1.name.ru, для одного из подобных ресурсов мне нужно настроить https.
Конфиг в /etc/nginx/conf.d в файле 1.name.ru.conf

server {
	server {
	listen 80;
	server_name 1.name.ru;
	proxy_set_header Host 1.name.ru;
	
	location / {
		rewrite ^(.*)$ https://1.name.ru$1 permanent;
	}
}

server {
    listen       443 ssl;
	server_name  1.name.ru;

    ssl_certificate      /etc/nginx/ssl/mycert.pem;
    ssl_certificate_key  /etc/nginx/ssl/mycert.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

	set $srv_addr "https://xx.xxx.xxx.xx";

	#charset koi8-r;
	
	access_log  /var/log/nginx/passport.access.log  main;

	proxy_set_header "Host" $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

	proxy_connect_timeout 75s;
	proxy_read_timeout 40m;
	proxy_send_timeout 40m;
	
	#types_hash_max_size 2048;
	#client_header_buffer_size 16k;
	#large_client_header_buffers 16 16k;
	#request_pool_size 512k;
	
	#client_body_buffer_size 5M;
	#client_body_temp_path /tmp/nginx/client_temp 1 2;
	client_max_body_size 50M;
			
	#proxy_buffer_size 32k;
	#proxy_buffers 16 64k;
	#proxy_busy_buffers_size 128k;
	#proxy_temp_file_write_size 128k;

#	proxy_intercept_errors on;

	location / {
		proxy_pass $srv_addr;
		proxy_no_cache 1;
		proxy_cache_bypass 1;
		#proxy_pass_header Set-Cookie;
		#proxy_pass_header Host;
		proxy_set_header "Host" $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_temp_path /var/nginx/proxy_temp;
		client_body_temp_path /var/nginx/client_body_temp;
	}

	location ~* \.(js|css)$ {
		proxy_pass $srv_addr;
		proxy_no_cache 1;
		proxy_cache_bypass 1;
		#proxy_pass_header Set-Cookie;
		#proxy_pass_header Host;
		proxy_set_header "Host" $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_temp_path /var/nginx/proxy_temp;
		client_body_temp_path /var/nginx/client_body_temp;
		expires -1;
		proxy_cache_valid 0;
		proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
	}
}


Файл nginx.conf
user nginx;
worker_processes 16;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$host" "$remote_addr" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout 65;

types_hash_max_size 2048;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 512;
client_header_buffer_size 16k;
large_client_header_buffers 16 16k;
request_pool_size 512k;

client_body_buffer_size 4M;
#client_body_temp_path /tmp/nginx/client_temp 1 2;
#client_max_body_size 4000M;

server_tokens off;

gzip off;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 5;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_min_length 10k;
# gzip_types text/plain text/css text/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;

#proxy_cache_path /var/nginx/cache-smartlearn levels=1:2 keys_zone=smartlearn:256m inactive=5d;

include /etc/nginx/conf.d/*.conf;
}

Немного порывшись в конфиге и как зашла на ресурс, заметила такую нездоровую вещь: ключи, которые лежат в /etc/nginx/ssl/ какие-то самоподписанные (выпущены месяц назад), в результате браузеры ругаются на недействительный сертификат, https зачеркнуто.
Итак, предыдущий сертификат, который меня смущает, самоподписанный. Был сгенерирован средствами linux, потом сконвертирован в понятный для виндовс формат и "вскормлен" IIS, таким образом я наблюдаю такую картину при заходе по внутренней сети и через внешнюю:
5cffa1c80d728709512679.png
Поэтому я смутно понимаю, что все же сертификат должен быть выдан организацией, которой доверяют извне, так я и нашла информацию о Let's Encrypt.

Пожалуйста, подскажите, как откуда выпускать сертификат и как пройти валидацию?

Мои грабли:

1) Сначала я не знала, что между IIS и интернетом находится Nginx и начала выпускать для IIS, где, собственно, лежит ресурс через ручную аутентификацию на Let’s Encrypt, думала что проблема в том, что для ручной идентификации нужен файл с произвольным набором символов, который выдает центр сертификации и в этом файле нет расширения и нужно было просто отредактировать типы MIME. Но после добавление типа, я проходила по проверочной ссылке по указанному пути через http, а со стороны центра сертификации получала ошибку. Сейчас понимаю, что сертификат надо получать через nginx?

2) Нашла https://club.directum.ru/post/178155 в комментариях интуитивно нравится способ комментатора Максима Буланова, но не знаю, правильно ли...

3) На всякий случай, если сертификат действительно нужно выпускать используя nginx, поставила certbot по этой инструкции, там есть мануал как ставить на старенький сервер с убунту 12.04
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto


Но чет нахожусь в сомнениях, как я пройду валидацию с помощью nginx, если сайт находится на iis. Последовать инструкции комментатора из пункта 2? Извините за вопросы, впервые с таким сталкиваюсь.
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
megafax
@megafax
web-программист
Просто добавьте
location ^~ /.well-known/acme-challenge/ {
	root /var/www/_letsencrypt;
}

в директиву с 80 портом. Таким образом у Вас IIS даже не будет знать что он с сертификатом (ему и не надо). А проверяющие файлы certbot будт складывать в /var/www/_letsencrypt на убунтовой машине
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы