本文介绍: nginx: [emerg] SSL_CTX_load_verify_locations(“/opt/nginx/conf/none“) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/opt/nginx/conf/none‘,’r’) error:2006D080:BIO routines:BIO_new_file:no such file error:0B084002:x509 cert

现象:

root@sandbox:/opt/nginx/sbin# ./nginx -t
nginx: [emerg] SSL_CTX_load_verify_locations("/opt/nginx/conf/none") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/opt/nginx/conf/none','r') error:2006D080:BIO routines:BIO_new_file:no such file error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib)
nginx: configuration file /opt/nginx/conf/nginx.conf test failed

Nginx 配置文件存在 SSL/TLS 相关指令,并且指定一个无效证书文件路径。具体来说,Nginx 尝试加载 /opt/nginx/conf/none 文件作为证书文件,但该文件存在,因此加载失败

排查

1检查nginx所有conf引用ssl路径是否正确?/证书有效性?/文件权限2、上述错误提示加载ssl证书找不到 /opt/nginx/conf/none ,但是nginx配置中压根就没配置
3匹配查找有咩有关于 none字段配置发现配置启用了 proxy_ssl_verify on,那么 Nginx 将验证反向代理服务器的 SSL/TLS 证书,以确保它是由受信任的证书颁发机构(CA)签发的,并且具有正确主机名。如果验证失败,Nginx 将拒绝连接反向代理服务器,并返回一个 SSL/TLS 错误root@sandbox:/opt/nginx/sites-available# grep -rn none *
cloud/prompt-test.conf:18:        proxy_ssl_trusted_certificate none;    # 不使用本地 CA 证书
root@sandbox:/opt/nginx/sites-available# grep -rn verify *
cloud/prompt-test.conf:20:        ssl_verify_client off;
cloud/prompt-test.conf:38:        proxy_ssl_verify on;

4、详细解析conf文件
upstream prom-node {
        server 192.168.10.23:6443; #
        server 192.168.10.24:6443; #
        server 192.168.10.27:6443; #

        keepalive 32;
}

server {
        listen 443;
        server_name prompt-test-apiserver.demo.com;
        access_log /opt/nginx/logs/prompt-test-apiserver.log main;
        error_log /opt/nginx/logs/prompt-test-apiserver.log;

        ssl                  off;
        ssl_session_timeout  5m;
        ssl_prefer_server_ciphers   on;
        proxy_ssl_trusted_certificate none;    # 不使用本地 CA 证书
        proxy_ssl_session_reuse on;            # 获取外部请求的 CA 证书
        ssl_verify_client off;
        proxy_buffering off;
        add_header Vary Accept-Encoding;
        client_max_body_size 128m;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
        # retry next upstream
        proxy_next_upstream error timeout http_570;

        limit_conn servicelimit 2000;

        location / {
        proxy_pass https://prom-node;
        proxy_ssl_verify on;
        proxy_ssl_server_name on;
        proxy_ssl_name kubernetes;
        }
}

配置介绍:
ssl off:禁用 SSL/TLS,因为没有在该 Nginx 配置中提供 SSL/TLS 相关设置
proxy_pass https://prom-node:将来自 https://prom-node 上游服务器的请求代理本地的 Nginx 服务器上。
proxy_ssl_verify on:启用 SSL/TLS 验证,以确保代理请求的上游服务器使用有效的 SSL/TLS 证书。
proxy_ssl_server_name on:启用 SSL/TLS 验证使用服务器验证,以确保上游服务器的 SSL/TLS 证书与当前正在连接服务器匹配。
proxy_ssl_name kubernetes设置 SSL/TLS 连接的服务器名为 kubernetes,这通常是为了在 SSL/TLS 握手期间验证上游服务器的 SSL/TLS 证书。

最终排查下来因为上游服务器不可用,随之ssl也无法继续提供,这个时候执行Nginx -t 时,找不到上游服务器的ssl就会从本地找,因为配置proxy_ssl_trusted_certificate none,所以Ngx在/opt/nginx/conf/下寻找none

处理措施:

1.关闭代理ssl验证
proxy_ssl_verify off;   #设置为off或者关闭

2.下线此conf(因当前环境不用这个配置了,所以博主直接清理了)

验证:

root@sandbox:~# /opt/nginx/sbin/nginx -t
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful

原文地址:https://blog.csdn.net/chengyinwu/article/details/131687103

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17091.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注