Startup Nginx gagal ssl tidak ada file atau direktori tersebut

14

Inilah kesalahan yang saya dapatkan:

Reload konfigurasi nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / ke / cert.pem") gagal (SSL: error: 02001002: pustaka sistem: fopen: Tidak ada kesalahan pada file atau direktori: 20074002: rutinitas BIO: FILE_CTRL: sistem lib error: 140DC002: rutinitas SSL: SSL_CTX_use_certificate_chain_file: system lib) nginx: file konfigurasi /etc/nginx/nginx.conf gagal

Saya 100% yakin bahwa file tersebut ada di lokasi itu tetapi Nginx tampaknya berpikir bahwa itu tidak ada. Saya menggabungkan domain.crtdan intermediate.crtsecara manual dalam urutan itu. Aku menggaruk kepalaku selama ini sepanjang hari. Saya harap seseorang telah melihat kesalahan ini dan memiliki solusi. (Dan catatan tambahan itu bukan kesalahan dalam menempel bahwa lokasi file hanya ditampilkan sekali dan tidak lagi setelah 'tidak ada file atau direktori').

tgoza
sumber
3
path/to/cert.pemtentu bukan lokasi yang valid.
Michael Hampton
Anda benar untuk menganggap bahwa itu bukan jalan yang sebenarnya. Namun saya dapat dengan mudah menjadikannya bagian yang valid dari lokasi. Tapi bagaimanapun saya tidak dapat memberikan Anda spesifik karena perusahaan ini sedang dilakukan untuk. Saya harus meninggalkan nama pengguna.
tgoza

Jawaban:

15

Apakah Anda yakin bahwa pengguna Nginx memiliki akses ke direktori?

Periksa juga izin .pemfile, jika Nginx tidak dapat mengaksesnya, itu dapat ditampilkan sebagai 'no such file or directory'.

Jika izinnya benar, Anda mungkin memeriksa jalur yang sebenarnya lagi. Bagaimana Anda menempelkannya (yang saya tahu Anda menghapus dir) tidak ada awal /yang bisa menjadi masalah.

EDIT

Coba pindahkan pengaturan SSL Anda ke struktur berikut (serta ubah nginx.confuntuk mencerminkan):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

Nginx bisa gagal pada Anda .pemkarena izin terlalu terbuka (perlu sumber untuk memverifikasi bahwa Nginx melakukan ini) tetapi pengaturan di atas harus berfungsi dengan baik.

Jim W.
sumber
Saya mengecek lintasan dan itu berisi /di awal jadi saya mengubah pertanyaan untuk mencerminkan itu. File ini terletak di /home/user/subdirsdan semua file dan izin direktori di dalamnya dimiliki oleh user.www-data (username.group name) dan 775 set. Dan saya pikir nginx memiliki akses ke apa pun yang dimiliki oleh www-data, meskipun saya bisa saja salah.
tgoza
Selalu kesalahan sederhana yang membutuhkan waktu lama untuk mencari tahu :) Senang Anda berhasil.
Jim W.
bagaimana tampilannya tepatnya? Saya memiliki tambang di $root/keys/saya sehingga garis sertifikat saya terlihat seperti ssl_certificate keys/cert.pem... apakah harus ada di webroot?
Bintang terang
Menggunakan jalur absolut melakukan trik.
Bintang terang
Saya menggunakan buruh pelabuhan dan menabrak masalah ini setiap kali saya menciptakan wadah. menambahkan chmod -R 600 /etc/nginx/ssltitik masuk saya menyelesaikan masalah terima kasih
Dimitri Kopriwa
3

Saya akan meninggalkan jawaban saya untuk masalah saya, kalau-kalau ada orang yang menemukan topik ini.

Saya telah menjalankan nginx di dalam wadah buruh pelabuhan, dan memiliki kesalahan yang sama ketika mencoba mengakses file kunci pribadi. Setelah menggaruk-garuk kepala selama beberapa jam, saya menyadari bahwa nginx buruh pelabuhan saya tidak memiliki volume pemasangan yang berisi data saya.

Satu-satunya opsi untuk menambah volume pemasangan adalah menghapus dan membuat ulang wadah dengan -vopsi: https://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

Terkadang, hal-hal sepele sulit dilihat. Semoga bantuan ini.

bizi
sumber
2

Skenario yang memungkinkan:

kadang-kadang mungkin terjadi bahwa, ketika mengkonfigurasi file SSL (kunci pribadi dan sertifikat) untuk Virtualhost yang sedang dikonfigurasi, itu lupa untuk menentukan jalur absolut di mana file-file ini berada.

Misalnya, jika Anda mengikuti dokumen resmi ini dari Nginx: http://nginx.org/en/docs/http/configuring_https_servers.html

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     tdmssl.crt;
    ssl_certificate_key tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Misalkan Anda menyimpan file SSL di dalam " /etc/nginx/conf.d ":

root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key

Apa yang terjadi?

Secara default, ketika tidak ditentukan path absolut untuk file biasa yang digunakan oleh Nginx, Nginx akan mencari file di "/ etc / nginx"

Dari /var/log/nginx/error.log

2017/01/24 21:05:10 [emerg] 13113#0: 
BIO_new_file("/etc/nginx/tdmssl.crt") 
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r') 
error:2006D080:BIO routines:BIO_new_file:no such file)

Apa yang harus dilakukan?

Untuk menentukan jalur absolut dari file tambahan yang digunakan oleh konfigurasi Virtualhost Anda.

Seperti ini:

root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm 
server {

    listen          443 ssl;
    server_name         tjsdatamanager.redtjs.com;
    ssl_certificate     /etc/nginx/conf.d/tdmssl.crt;
    ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        include proxy_params;
        proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
    }

}
ivanleoncz
sumber
-1

Saya memiliki masalah yang sama. Saya harus mengubah file / etc / nginx / situs-enabled / default & default.save yang ditambahkan secara otomatis nama situs saya tanpa .com setelah proses setup, YANG ADALAH MASALAH DALAM INSTAN SAYA . Agar singkat, dua baris ini perlu diubah di / etc / nginx / sites-enabled / default saya. Harap perhatikan bahwa file ini ditampilkan dengan ikon pintasan di sistem file saya, tetapi saya dapat mengklik kanan file tersebut dan mengeditnya dengan opsi "Edit / Penyunting Internal".

HTTPS - permintaan proxy ke Node.js ap lokal # HTTPS - permintaan proxy ke aplikasi Node.js lokal: server {listen 443; server_name switchmagic.com;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem;

Ketika saya membaca file-file dan menambahkan .com, yang merupakan konvensi penamaan yang saya gunakan untuk menambahkan file, ke referensi switchmagic di direktori file yang melempar kesalahan, semuanya baik-baik saja! Saya menemukan banyak Dev yang mengajukan pertanyaan yang sama jadi saya ingin melempar solusi saya di luar sana untuk membantu karena jawaban yang saya temukan sebagian besar tentang izin root, tetapi izin root bukan masalah dalam kasus saya. Rock on Devs.

pengguna3777549
sumber