首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神经根SSL错误的nginx反向代理

神经根SSL错误的nginx反向代理
EN

Server Fault用户
提问于 2019-08-19 16:22:33
回答 2查看 1.5K关注 0票数 1

继续尝试将nginx配置为使用运行在本地主机上的胚根的反向代理,现在我在遵循关于代理的文档创建了自己的SSL证书之后获得了SSL错误。

我的nginx配置的相关部分是

代码语言:javascript
复制
location /radicale/ {                                                         
          proxy_pass                    http://127.0.0.1:9468/;                     
          #proxy_pass                   http://46.105.31.182:9468/;                 
          proxy_set_header              X-Script-Name /radicale;                    
          proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for; 
          proxy_set_header              X-Remote-User $remote_user;                 
          auth_basic                    "Radicale - Password Required";             
          auth_basic_user_file          /etc/radicale/users;                        
          proxy_ssl_verify              on;                                         
          proxy_ssl_certificate         /etc/radicale/client_cert.pem;              
          proxy_ssl_certificate_key     /etc/radicale/client_key.pem;               
          proxy_ssl_trusted_certificate /etc/radicale/server_cert.pem;              
}                                                                             

...and我对SSL证书的激进配置是..。

代码语言:javascript
复制
[server]
hosts = 127.0.0.1:9468
ssl = true
certificate = /etc/radicale/server_cert.pem
key = /etc/radicale/server_key.pem
certificate_authority = /etc/radicale/client_cert.pem

[auth]
type = http_x_remote_user
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = bcrypt

如果我转到https://####/radicale站点,会提示我输入用户名和密码以进行身份验证,但nginx随后返回以下错误.

代码语言:javascript
复制
upstream prematurely closed connection while reading response header from upstream, client: 62.253.154.162, server: #####, request: "GEET /radicale/ HTTP/2.0", upstream: "http://127.0.0.1:9468/", host: "####"

...and上游神经根报道.

代码语言:javascript
复制
ERROR: An exception occurred during request: SSL handshake failed: [SSL: HTTP_REQUEST] http request (_ssl.c:1076)

如果我禁用根和nginx上的反向代理之间的SSL,那么这不是一个问题,我可以访问WebUI https://####/radicale并登录。但是,如果我启用它,然后转到https://####/radicale,并得到一个弹出框,询问我用户名/密码,浏览器报告502 Bad Gateway,上面的错误再次发生。

我确实有LetsEncrypt证书,并且正在处理我的域,这是否会导致与用于反向代理的SSL证书发生某种冲突?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2019-08-20 09:23:59

根据Nginx文档proxy_ssl_certificate proxy_ssl_certificate_key是相关的,如果您希望NGINX使用所提供的SSL客户端证书将自己标识到上游服务器。您还需要配置上游服务器以要求所有传入SSL连接的客户端证书。

我认为根目录不是通过客户端证书来处理身份验证的,您的激进服务器正在监听127.0.0.1,所以通过在根目录上配置SSL,您基本上是想加密本地主机上的通信。

在您的配置中的另一点。

代码语言:javascript
复制
location /radicale/ {                                                         
          ...
          auth_basic                    "Radicale - Password Required";             
          auth_basic_user_file          /etc/radicale/users;                        
          ...
}   

您的身份验证部分已经由激元本身处理。在revers代理上添加这些行是没有意义的。

我建议:

  • 禁用神经根上的SSL,让revers代理使用LetsEncrypt处理SSL。
  • 禁用revers上的基本命令,让激进用户处理用户身份验证。

如果您仍然希望加密revers、代理和激元之间的通信,只需删除客户端证书部分并添加proxy_ssl_name

代码语言:javascript
复制
location /radicale/ {                                                         
          proxy_pass                    http://127.0.0.1:9468/;                     
          #proxy_pass                   http://46.105.31.182:9468/;                 
          proxy_set_header              X-Script-Name /radicale;                    
          proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for; 
          proxy_set_header              X-Remote-User $remote_user;  

          proxy_ssl_name                "####";
          proxy_ssl_verify              on;                                                     
          proxy_ssl_trusted_certificate /etc/radicale/server_cert.pem;              
}   

为了避免错误,需要使用proxy_ssl_name

代码语言:javascript
复制
upstream prematurely closed connection while reading response header from upstream, client: 62.253.154.162, server: #####, request: "GEET /radicale/ HTTP/2.0", upstream: "http://127.0.0.1:9468/", host: "####"

这是因为过去根据SSL证书名称验证的名称默认为$proxy_host。

票数 2
EN

Server Fault用户

发布于 2022-01-26 18:59:09

我知道这是个老生常谈,但说句公道话,我让它这样运作.

我使用的是一个独立的子域,比如radicale.example.com,脚本在/中,所以X-Script-Name就是这样设置的。我使用letsencrypt/certbot作为证书。

nginx节是:

代码语言:javascript
复制
server {
    server_name radicale.example.com;
    # (all :80 connections are being redirected to :443)
    listen 443 ssl;                                                                                                                                                           
    listen [::]:443 ssl;                                                                                                                                      
    access_log /var/log/nginx/radicale/access.log main;                                                                                                                                                      
    error_log  /var/log/nginx/radicale/error.log info;                                                                                                                                                                                                                                                                                    
    location / {
            proxy_pass        http://localhost:5232/;
            proxy_set_header  X-Script-Name /;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;                                                                                                                                   
            proxy_set_header  Host $http_host;                                                                                                                                                              
            proxy_pass_header Authorization;                                                                                                                                                                
    }                                                                                                                                                                                                       
    ssl_certificate /etc/letsencrypt/live/radicale.example.com/fullchain.pem; # managed by Certbot                                                                                                             
    ssl_certificate_key /etc/letsencrypt/live/radicale.example.com/privkey.pem; # managed by Certbot                                                                                                           

}

在根目录配置中不需要SSL设置,我允许根目录处理用户密码。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/979856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档