使用OpenSSL + Nginx转发并加密流量数据

1,249 阅读1分钟

Nginx自带的有一个stream模块,可以用于反向代理转发TCP连接的流量,并且我们可以配合使用开源的OpenSSL生成证书自签名证书来加密流量。 首先我们生成证书:

# 生成key文件:
openssl genrsa -des3 -out server.key 4096
# 生成csr文件:
openssl req -new -key server.key -out server.csr
# 生成crt文件:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
# 转换pem文件:
openssl x509 -in server.crt -out cert.pem
# 转换key.pem:
openssl x509 -in server.key -out key.pem

然后我们在Nginx中添加相关的配置: 找到相关的目录:/etc/nginx/conf.d随便新建一个文件名:test.conf。 编辑内容:

stream {
        # 这里是不进行ssl加密的转发
        server {

                listen 12345;

                proxy_pass test.com:12345;

        }

        upstream test {
                server test.com:12346;
        }

        server {

                listen 12346 ssl;

                proxy_pass test;

                ssl_certificate crts/server.crt;

                ssl_certificate_key crts/server.key;

                ssl_prefer_server_ciphers on;

                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

                ssl_session_cache shared:SSL:20m;

                ssl_session_timeout 24h;

                ssl_handshake_timeout 30s;
                # 若转发的目标服务器是ssl这里需要进行配置
                proxy_ssl on;

        }
}

reload Nginx配置,若出现SSL加密证书相关的错误可以尝试:

mv server.key server.key.org
openssl rsa -in server.key.org -out server.key

再进行reload。