Nginx'i başlatırken veya nginx -t çalıştırırken SSL_CTX_use_PrivateKey("/etc/nginx/ssl/site.key") failed görüyorsanız, belirtilen özel anahtar ya okunamıyor ya da sertifikayla eşleşmiyor. Hatanın devamındaki OpenSSL kodu nedeni ayırt eder.
Devamındaki koda göre neden
key values mismatch: sertifika başka bir anahtarla üretilmiş.bad decrypt/bad password read: anahtar parola ile korunuyor.no start line/PEM_read_bio: dosya PEM değil ya da başlık satırı eksik.Permission denied: Nginx ana süreci dosyayı okuyamıyor.
Çözüm adımları
- Eşleşmeyi doğrulayın (çıktılar aynı olmalı):
EC anahtar kullanıyorsanızopenssl x509 -noout -modulus -in site.crt | openssl md5 openssl rsa -noout -modulus -in site.key | openssl md5openssl ec -in site.key -noout -textile anahtarı,openssl x509 -in site.crt -noout -pubkeyile genel anahtarı karşılaştırın. - Parola varsa kaldırın:
openssl rsa -in site.key -out site-nopass.key chmod 600 site-nopass.key - Başlığı kontrol edin:
head -1 site.keyçıktısı-----BEGIN PRIVATE KEY-----veya-----BEGIN RSA PRIVATE KEY-----olmalı. - Yapılandırmadaki yolları güncelleyin:
ssl_certificate /etc/nginx/ssl/site-fullchain.crt; ssl_certificate_key /etc/nginx/ssl/site-nopass.key; nginx -tardındansystemctl reload nginx.
Sık yapılan hata
Yenileme sonrasında yeni sertifikayı koyup eski anahtarı bırakmak en yaygın nedendir. Sertifikayı yeni bir CSR ile aldıysanız mutlaka o CSR'ın anahtarını kullanın. Yeni CSR üretmek için CSR oluşturucuyu kullanabilir, sertifikanızı yükledikten sonra SSL denetleme aracıyla sonucu teyit edebilirsiniz.
Ek ipuçları
Nginx ana süreci root olarak başladığı için anahtar dosyasını root okuyabiliyorsa izin sorunu çıkmaz; yine de chmod 600 ve sahibinin root olması güvenli bir ayardır. Sertifikayı yenilerken dosya adlarını sabit tutarsanız yapılandırmayı değiştirmeden yalnızca reload yeterli olur. Parola korumalı anahtar kullanmanız gerekiyorsa ssl_password_file yönergesini değerlendirin.