Nginx反向代理中基于SNI的SSL解决方案

2023年 8月 4日 21.9k 0

Nginx反向代理中基于SNI的SSL解决方案

随着互联网技术的发展,Web应用的安全性问题越来越受到重视。SSL证书作为一种提供数据传输安全的加密技术,成为了保护Web应用的重要手段之一。而在一些特殊的情况下,需要在同一台服务器上部署多个SSL证书,这时候基于SNI的SSL解决方案便应运而生。

一、SNI(Server Name Indication)是什么

SNI是一种TLS扩展协议,可以让客户端在建立SSL连接时,在“Client Hello”消息中包含扩展字段,告诉服务器客户端想要连接的主机名。在单个IP地址和端口上,可以实现多域名同时使用不同的SSL证书。

然而,SNI并不被所有的浏览器和服务器支持。在使用SNI时,必须确保客户端和服务器支持同一个SSL协议版本,并且客户端必须支持SNI扩展。目前常用的浏览器,例如Chrome、Firefox、IE7及以上版本、Opera等均支持SNI。

二、Nginx反向代理和SSL

Nginx是一种高性能的Web服务器,并且支持反向代理。反向代理是一种信息安全技术,将请求发送到不同的服务器上,并将响应返回给请求者。反向代理服务器还可以实现负载均衡和SSL加密。

反向代理服务器作为中间层,与前端Web服务器和后端通信。Nginx支持http和https两种服务模式。当使用https服务时,需要进行SSL加密和解密。

Nginx的SSL支持有两种模式:单一SSL证书模式和基于SNI的多证书模式。在单一SSL证书模式下,只能使用一个SSL证书,即不能针对不同的域名使用不同的SSL证书。而在基于SNI的多证书模式下,可以实现多域名SSL加密传输。

三、基于SNI的SSL解决方案

  • 生成SSL证书
  • 首先需要申请SSL证书,并生成相应的证书链和私钥。这里假设我们要使用两个域名abc.com和xyz.com,分别生成两个证书。

    生成证书:

    openssl req -newkey rsa:2048 -nodes -keyout abc.com.key -out abc.com.csropenssl x509 -req -days 365 -in abc.com.csr -signkey abc.com.key -out abc.com.crt

    openssl req -newkey rsa:2048 -nodes -keyout xyz.com.key -out xyz.com.csropenssl x509 -req -days 365 -in xyz.com.csr -signkey xyz.com.key -out xyz.com.crt

    生成证书链:

    cat abc.com.crt domain.crt > abc.com-bundle.crtcat xyz.com.crt domain.crt > xyz.com-bundle.crt

  • 配置Nginx
  • 在Nginx的配置文件中,需要添加如下的配置:

    http { ... # 配置SSL缓存 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;

    # 配置SSL证书 server {

    listen 443 ssl;
    server_name abc.com;
    ssl_certificate /path/to/abc.com-bundle.crt;
    ssl_certificate_key /path/to/abc.com.key;

    登录后复制

    }

    server {

    listen 443 ssl;
    server_name xyz.com;
    ssl_certificate /path/to/xyz.com-bundle.crt;
    ssl_certificate_key /path/to/xyz.com.key;

    登录后复制

    }}

    在配置文件中指定ssl_certificate和ssl_certificate_key即可分别使用不同的SSL证书。同时,需要为每个域名配置一个server块。

  • 验证配置
  • 重启Nginx后,即可验证配置是否生效。在浏览器中输入abc.com和xyz.com,浏览器会在TLS握手阶段发送SNI请求并返回对应的SSL证书。如果请求正常返回,即可证明基于SNI的SSL解决方案已经生效。

    四、总结

    基于SNI的SSL解决方案可以实现在同一台服务器上部署多个SSL证书,适用于需要使用多域名SSL加密的场景。然而,需要注意的是,SNI并不被所有的浏览器和服务器支持,因此需要在使用时确保客户端和服务器支持同一个SSL协议版本,并且客户端必须支持SNI扩展。在配置过程中,需要为每个域名配置一个server块,并指定对应的SSL证书和私钥。

    以上就是Nginx反向代理中基于SNI的SSL解决方案的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论