Udało mi się utworzyć moje certyfikaty z LE bez błędów, udało mi się również przekierować mój ruch z portu 80 na port 443. Ale kiedy ponownie ładuję serwer nginx, nie mogę uzyskać dostępu do mojej witryny. Dzienniki błędów Ngnix pokazują ten wiersz:
4 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 192.168.0.104, server: 0.0.0.0:443
Myślę, że to oznacza, że nie może znaleźć certyfikatów, które następnie przeszedłem do ścieżki certyfikatów i są one dostępne, co może być problemem? Oto jak wygląda moja konfiguracja Ngnix:
server {
listen 80;
server_name pumaportal.com www.pumaportal.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name pumaportal.com www.pumaportal.com;
add_header Strict-Transport-Security "max-age=31536000";
ssl_certificate /etc/letsencrypt/live/pumaportal.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pumaportal.com/privkey.pem;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/sub.log combined;
location /.well-known {
alias /[MY PATH]/.well-known;
}
location / {
proxy_pass http://localhost:2000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Wszystko wydaje się dość proste. Nie rozumiem, gdzie może być problem.
Po uruchomieniu nginx -t wszystko wydaje się w porządku:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx
ssl
lets-encrypt
Rémi
źródło
źródło
server
bloki? Co dokładnie zrobiłeś, kiedy dostałeś ten błąd?Odpowiedzi:
Domyślam się, że inny serwer nasłuchuje na porcie 443. Ten serwer nie ma zdefiniowanego certyfikatu ssl_certyfikat i jest automatycznie wybierany (SNI). Spróbuj usunąć wszystkie dowiązania symboliczne z / etc / nginx / witryn z włączonym wyjątkiem tego jednego serwera, na którym chcesz pracować (jeśli to możliwe, w przeciwnym razie sprawdź wszystkie serwery pod kątem odsłuchiwania 443 bez prawidłowej konfiguracji).
źródło
Rozwiązałem ten sam problem wcześniej tego ranka, więc jestem tutaj, aby wyjaśnić punkt CA (który, gdy już rozumiem problem, został dobrze wykonany), najprawdopodobniej masz dwa bloki serwera:
SNI będzie pasował tylko do tych, które są oznaczone jako
ssl
detektor. Jednak domyślny serwer będzie przechwytywał cały ruch przychodzący na 443, niezależnie od SSL czy nie. W związku z tym faktycznie uniemożliwia SNI, by działał od samego początku, gromadząc cały ruch dla siebie.Objawy:
nginx -t
przeładowaniu usługi i)Rozwiązania:
Rozwiązałem problem dziś rano, usuwając domyślny blok serwera, umożliwiając w ten sposób dopasowanie SNI w odbiornikach SSL.
Alternatywnym rozwiązaniem byłoby dodanie
ssl
detektora issl_certificate
wierszy do bloku serwera, aby SNI był zasadniczo włączony na domyślnym hoście. Nadal będziesz otrzymywać błędy SSL, więc nie jest to najlepsze rozwiązanie, ale pozwoli Ci działać SNI :)źródło
Aplikuj
default_server
na example.com lub www.example.com. Nie oba.Dlatego to zadziała:
Uwaga na temat hostów wirtualnych: Upewnij się, że
default_server
parametr nie jest zdefiniowany nigdzie indziej - jeśli masz wiele hostów na serwerze.źródło
Późno do gry jak zwykle, ale ponieważ pomogło mi to ... Sprawdź, czy certyfikat jest źle sformułowany. Podczas budowania „zunifikowanego” crt (crt + pośredni), robienie
Jakoś straciłem LF i dostałem taką linię:
zamiast
a nginx nie przejmie certyfikatu i nie powiedzie się z błędem wspomnianym powyżej.
Robić
dał mi wskazówkę, że openssl się pomyli.
źródło
Sprawdź, czy uprawnienia do plików dla certyfikatów są prawidłowe. Proszę zamieścić listę katalogów (
ls -la
)źródło