fatedier / frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Apache License 2.0
86.51k stars 13.38k forks source link

希望能够添加HTTPS证书替换, HTTPS host修改等功能 #3522

Closed asaneneko closed 1 year ago

asaneneko commented 1 year ago

Describe the feature request

希望能够添加HTTPS证书替换, HTTPS host修改等功能 有些HTTPS服务器强校验HOSTNAME或者对不同HOSTname显示不同网页的功能,不好通过frp代理

现阶段可以使用nginx + frps满足该需求,不过配置起来较为麻烦

Describe alternatives you've considered

将HTTPS监听地址配置为444 frpc中HTTPS配置中 custom_domains=填写真实HOST 服务端启动nginx, nginx监听443, 转发到frps444

#修改https的host
server {
    listen 443 ssl;
    server_name server1.域名.com;
    ssl_certificate /path/to/your/ssl/certificate;    # 服务器A的证书
    ssl_certificate_key /path/to/your/ssl/key;        # 服务器A的私钥
    #dayxin.fun有自己的证书
    location / {
        proxy_pass https://127.0.0.1:444;  # 内网frps服务器A的地址
        proxy_set_header Host 192.168.1.100;   # 设置代理请求的Host头字段
        #注意, 需要在frpc中修改custom_domains为这里的host, 因为nginx会先进行替换
        proxy_ssl_verify off;  # 关闭对内网Web服务器A的SSL证书验证
        proxy_ssl_server_name on;  # 开启SNI支持,以便可以通过HTTPS代理请求
    }
}
#仅对证书做替换
server {
    listen 443 ssl;
    server_name server1.域名.com;

    ssl_certificate /path/to/your/ssl/certificate;    # 服务器A的证书
    ssl_certificate_key /path/to/your/ssl/key;        # 服务器A的私钥

    location / {
        proxy_pass https://127.0.0.1:444;  # 内网Web服务器B的地址
        proxy_ssl_verify off;  # 关闭对内网Web服务器B的SSL证书验证
        proxy_ssl_server_name on;  # 开启SNI支持,以便可以通过HTTPS代理请求
    }
}

#默认透传
server {
    listen 443 default_server;
    server_name _;
    location / {
        proxy_pass https://127.0.0.1:444;  # 将请求透传到127.0.0.1:444
    }
}

Affected area

meta-chen commented 1 year ago

你好,我也同样使用nginx + frps实现反向代理和内网穿透,但是我在链接nextcloud时遇到了SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream的问题,老哥有遇到过吗

asaneneko commented 1 year ago

这是一个关于 SSL 握手失败的错误消息,通常出现在使用 Nginx 作为反向代理服务器并且尝试与上游服务器建立 SSL 连接时。

该错误消息 "SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number" 指示的是,正在尝试的 SSL 连接使用的协议版本与上游服务器所期望的协议版本不一致。

一种可能的情况是,您的 Nginx 配置中使用的 SSL 协议版本与上游服务器接受的版本不匹配。例如,您的 Nginx 配置可能会尝试使用 SSLv3,而上游服务器可能已经不再接受这个较旧的协议,而期望使用更现代、更安全的协议,如 TLSv1.2 或 TLSv1.3。

要解决这个问题,你需要检查并更新你的 Nginx 配置以使用与上游服务器兼容的 SSL 协议版本。您可以在 Nginx 配置中的适当位置添加或修改一行,如: ssl_protocols TLSv1.2 TLSv1.3; 此外,如果你没有完全控制上游服务器的话,你也可以需要联系该服务器的管理员,了解他们所期望的 SSL 协议版本是什么。

此外,这个错误也可能是由于上游服务器配置错误或者证书问题造成的,比如服务器并未配置正确的 SSL 证书,或者使用了一个自签名证书而客户端并未正确配置以接受这种证书。对于这种情况,你可能需要检查服务器的 SSL 证书和配置,并确保它们都是正确和有效的。

--该回答来自CHATGPT4

github-actions[bot] commented 1 year ago

Issues go stale after 30d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.