web-dev-qa-db-ja.com

Nginxの起動は、そのようなファイルやディレクトリではなくSSLで失敗します

ここに私が得ているエラーがあります:

Nginx構成の再読み込み:nginx:[emerg] SSL_CTX_use_certificate_chain_file( "/ path/to/cert.pem")failed(SSL:error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system libエラー:140DC002:SSLルーチン:SSL_CTX_use_certificate_chain_file:system lib)nginx:構成ファイル/etc/nginx/nginx.confテストが失敗しました

私はファイルがその場所にあることを100%確信していますが、Nginxはそこにはないと考えているようです。 domain.crtおよびintermediate.crt手動でこの順序で。私はこれについて一日中頭を悩ませてきました。私は誰かがこのエラーを見て解決策を持っていることを願っています(そして、ファイルの場所が一度だけ表示され、「そのようなファイルまたはディレクトリはありません」の後に再び表示されないという貼り付けのエラーではありません)。

15
tgoza

Nginxユーザーがディレクトリにアクセスできることを確認しますか?

また、.pemファイルの権限を確認します。Nginxがアクセスできない場合は、'no such file or directory'と表示されます。

権限が正しい場合は、実際のパスを再度確認する場合があります。あなたがそれをどのように貼り付けたか(私はあなたがdirを削除したことを知っています)、問題である可能性のある最初の/はありません。

[〜#〜]編集[〜#〜]

SSL設定を次の構造に移動してみてください(およびnginx.confを反映するように変更してください)。

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

.pemでNginxが失敗している可能性があります。これは、権限が開いているため(Nginxがこれを行うことを確認するためのソースが必要)、上記の設定で問題なく機能するためです。

16
Jim W.

誰かがこのトピックに遭遇した場合に備えて、私は自分の問題に対する私の答えを残しておきます。

Nginxをdockerコンテナー内で実行しましたが、秘密鍵ファイルにアクセスしようとすると同じエラーが発生します。数時間頭を掻いたところ、私のdockerのnginxにはデータを含むマウントボリュームがないことに気づきました。

マウントボリュームを追加する唯一のオプションは、-vオプションを使用してコンテナーを削除して再作成することです。 https://docs.docker.com/engine/tutorials/dockervolumes/

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

時には、ささいなことがわかりにくいことがあります。この助けを願っています。

3
bizi

可能なシナリオ:

構成中の仮想ホスト用のSSLファイル(秘密鍵と証明書)を構成するときに、これらのファイルが存在する絶対パスを指定し忘れたことがあります。

たとえば、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;
    ...
}

/ etc/nginx/conf.d」内にSSLファイルを保存するとします:

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

どうなりますか?

デフォルトでは、Nginxが使用する通常のファイルの絶対パスが指定されていない場合、Nginxは「/ etc/nginx」でファイルを検索します

/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)

何をしなければならないのですか?

Virtualhost構成で使用される追加ファイルの絶対パスを指定します。

このような:

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;
    }

}
2
ivanleoncz