το σφάλμα nginx cannot load certificate path/fullchain.pem εμφανίζεται όταν δοκιμάζουμε την υπηρεσία NGINX μετά τη διαγραφή πιστοποιητικών Let’s Encrypt που δημιουργείται με Certbot.
Στον διακομιστή, το σφάλμα εμφανίζεται ως εξής:
nginx: [emerg] cannot load certificate "/etc/letsencrypt/live/example.com/fullchain.pem": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/letsencrypt/live/example.com/fullchain.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed
Καμπίνα
Σφάλμα nginx στο παρασκήνιο
Σε προηγούμενο άρθρο έδειξα πώς μπορείτε να διαγράψετε από Certbot τους τομείς που φιλοξενούνταν στο διακομιστή στο παρελθόν αλλά οι οποίοι επί του παρόντος δεν είναι πλέον ενεργοί. Διαγραφή παλιών τομέων Certbot certificates (Ας κρυπτογραφήσουμε το πιστοποιητικό).
Όταν διαγράφετε πιστοποιητικά SSL για ενεργούς τομείς, οι οποίοι εξακολουθούν να φιλοξενούνται στον διακομιστή, με την εντολή: sudo certbot delete
, το πιστοποιητικό διαγράφεται αυτόματα, αλλά παραμένει ενεργό σε περιόδους σύνδεσης έως ότου γίνει επανεκκίνηση της υπηρεσίας nginx
. Με την εντολή nginx -t (δοκιμάζοντας την υπηρεσία) μπορεί να εκπλαγείτε που η δοκιμή αποτυγχάνει με το παραπάνω σφάλμα. Ωστόσο, η λύση είναι πολύ απλή.
Διορθώθηκε το nginx: Το [emerg] δεν μπορεί να φορτώσει το πιστοποιητικό fullchain.pem
Όταν εγκαθιστάτε ένα πιστοποιητικό SSL Let’s Encrypt με Certbot, στο αρχείο ρυθμίσεων του nginx για τον τομέα, προστίθενται μερικές γραμμές που υποδεικνύουν την ύπαρξη του πιστοποιητικού. Όταν διαγραφεί το πιστοποιητικό, οι γραμμές παραμένουν στο nginx config και πρέπει να διαγραφούν χειροκίνητα. Δηλαδή οι παρακάτω γραμμές:
.....
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name example.com www.example.com;
listen 80;
return 404; # managed by Certbot
Αφού διαγράψετε αυτές τις γραμμές από το αρχείο confg nginx του τομέα για τον οποίο καταργήσατε το πιστοποιητικό SSL, εκτελέστε την εντολή nginx -t
για να ελέγξω αν όλα είναι εντάξει.
[root@server]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@server]#
Τώρα μπορείτε να επανεκκινήσετε με ασφάλεια την υπηρεσία nginx.