Saya telah berhasil membuat sertifikat saya dengan LE tanpa kesalahan, saya juga berhasil mengarahkan lalu lintas dari port 80 ke port 443. Tetapi ketika saya memuat ulang server nginx saya, saya tidak dapat mengakses situs web saya. Log kesalahan Ngnix menunjukkan baris ini:
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
Saya pikir ini berarti bahwa ia tidak dapat menemukan sertifikat yang kemudian saya navigasikan ke jalur sertifikat dan keduanya ada di sana, apa masalahnya? Berikut ini tampilan konfigurasi Ngnix saya:
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;
}
}
Semua itu kelihatannya cukup jelas. Saya tidak mengerti di mana masalahnya.
Setelah menjalankan nginx -t semuanya tampak ok:
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
Resi
sumber
sumber
server
blok lain ? Apa sebenarnya yang Anda lakukan ketika Anda mendapatkan kesalahan itu?Jawaban:
Dugaan saya adalah Anda memiliki server lain yang mendengarkan pada port 443. Server ini tidak memiliki ssl_certificate yang ditentukan, dan itu dipilih secara otomatis (SNI). Cobalah untuk menghapus semua tautan simbolis dari / etc / nginx / sites-enabled kecuali server yang ingin Anda gunakan ini berfungsi (jika itu memungkinkan, periksa semua server Anda untuk mendengarkan 443 tanpa terkonfigurasi dengan benar).
sumber
Saya memperbaiki masalah yang sama tadi pagi ini, jadi saya di sini untuk mengklarifikasi poin CA (yang, sekarang saya mengerti masalahnya, dibuat dengan baik), Anda kemungkinan besar memiliki dua blok server:
SNI hanya akan cocok dengan yang berlabel
ssl
pendengar. Namun, server default akan mengambil semua lalu lintas masuk pada 443, terlepas dari SSL atau tidak. Oleh karena itu, sebenarnya preveting SNI dari benar-benar berfungsi sama sekali, langsung dari kelelawar, dengan menimbun semua lalu lintas untuk dirinya sendiri.Gejala:
nginx -t
dan layanan yang dimuat ulang)Solusi:
Saya memperbaiki masalah pagi ini dengan menghapus blok server default, sehingga memungkinkan SNI untuk mencocokkan pada pendengar SSL.
Solusi alternatif adalah dengan menambahkan
ssl
pendengar danssl_certificate
garis ke blok server sehingga SNI pada dasarnya diaktifkan pada host default Anda. Anda masih akan mendapatkan kesalahan SSL, jadi itu bukan solusi terbaik, tetapi ini akan membuat SNI Anda berfungsi :)sumber
Terapkan
default_server
di example.com atau www.example.com. Tidak keduanya.Maka ini akan bekerja:
Catatan tentang host virtual: Pastikan
default_server
parameter tidak ditentukan di tempat lain - jika Anda memiliki beberapa host di server.sumber
Terlambat ke permainan seperti biasa, tetapi karena itu membantu saya ... Periksa apakah sertifikat salah. Ketika membangun crt "unified" (crt + perantara), lakukan
Saya entah bagaimana kehilangan LF dan mendapat garis seperti ini:
dari pada
dan nginx tidak akan mengambil sertifikat dan gagal dengan kesalahan yang disebutkan di atas.
Perbuatan
memberi saya petunjuk untuk openssl akan kesalahan keluar.
sumber
Periksa apakah izin file Anda untuk sertifikat sudah benar. Silakan kirim daftar direktori (
ls -la
)sumber