Nginx下配置SSL证书 调转到IIS、tomcat二级站点

   2023-02-10 学习力0
核心提示:最近由于客户需要,购买了商业SSL证书需要配置!  由于我的网站主域名是部署在IIS下,所以先讲解下IIS下的配置过程; 后面由于二级域名的系统在tomcat下,所以又将SSL迁移到了Nginx下!整体结构如下图:  先百度两个名词概念(具体可以另行查阅):HTTPS(Hy

最近由于客户需要,购买了商业SSL证书需要配置!  

由于我的网站主域名是部署在IIS下,所以先讲解下IIS下的配置过程; 后面由于二级域名的系统在tomcat下,所以又将SSL迁移到了Nginx下!

整体结构如下图:

  Nginx下配置SSL证书 调转到IIS、tomcat二级站点

先百度两个名词概念(具体可以另行查阅):

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):是以安全为目标的HTTP通道;用于安全的HTTP数据传输!HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)!HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL!它只能确保你的数据从客户端发送到服务端的传输过程是安全的,并不能保障你的服务器安全性!

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密

SSL证书:SSL证书是数字证书的一种,因为配置在服务器上,也称为SSL服务器证书。

ssl证书分类

扩展验证型(EV:Extended Validation SSL)SSL证书

组织验证型(OV:Organization Validation SSL)SSL证书

域名验证型(DV:Domain Validation SSL)SSL证书

我们买的是OV版 通配型 即支持二级域名使用!

 

先看下https和ssl证书的展现效果:

 Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

当网站使用SSL证书时,客户端会自动识别 出现 安全锁标识!告诉你这是个可信任站点!

 Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

这里可以看到 SSL证书的加密算法为强度256位的RSA非对称加密!并可以看到证书的使用者、颁发者、有效期等相关的信息!

 

具体的配置过程

由于是购买的商业证书,所以要配合代理商完成证书申请,并按照要求完成域名验证!最终会下发SSL证书文件及密钥文件

代理商会将各种环境下的文件都给你:

 Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

一、IIS下配置SSL证书

先看下IIS下的证书文件:

 Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

是一个后缀为.pfx的 微软平台下的 包含公钥和私钥的证书文件!

 

1):进入Windows管理控制程序:开始->cmd->MMC/MMC.exe

2):在打开的控制台窗口中:文件->添加/删除管理单元

3):在新窗口的左边 可用的管理单元 中 选择 “证书” 点击添加 ;在新弹出的窗口中选择 “计算机账户”

  Nginx下配置SSL证书 调转到IIS、tomcat二级站点

Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

完成后 ,点击确定,返回主控制台;

4):在 主控制台中 根节点下 选择 证书->个人->证书 右键 ->所有任务->导入!

 Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

在弹出的证书导入向导中 点击下一步 选择 供应商提供给你的 .pfx文件!点击 下一步 填写你的私钥密码!

 

完成后 主控制台的个人证书 里面会包含你的证书!

 

5): IIS域名绑定控制

  Nginx下配置SSL证书 调转到IIS、tomcat二级站点

 

 

在IIS对应的站点下,添加绑定,选择https填写你的域名后,选择刚才添加的SSL证书;点击完成既可!

 

至此你的SSL证书在IIS中就配置完成了!

 

值得注意的是 https默认的端口为443端口,需要防火墙设置并在外网映射此端口;

 

 

二:nginx下配置SSL证书 跳转到IIS站点

 最后由于我向通过nginx反向代理到网站 并配置SSL证书,所以过程如下!

1:关闭IIS中配置的 80、443 两个端口的绑定;只保留一个内网端口绑定!

2:从nginx官网下载最新的 安装文件!可以参考其它的配置手册;

下载地址:http://nginx.org/en/download.html

 

  关于nginx版本的选择: 这里默认推荐最新版本的nginx-1.12.2版本,但是由于客户很多是使用IE8的群体,但是nginx1.11.0之后的版本不支持SSL证书的 3DES弱安全配置;所以我这里选择了 1.10.3的版本!

 

3:将供应商提供的 xxx.key 和 xxx.crt 文件拷贝到 nginx的 conf配置文件目录下

然后配置nginx.conf配置文件; 其它参照默认配置,此处增加 https server;

#门户网站HTTPS配置

server {

    listen 443;

    server_name www.xxxdomain.com;

    ssl on;

    ssl_certificate _.xxxdomain.com_bundle.crt;

    ssl_certificate_key _.xxxdomain.com.key;

 

    ssl_session_cache shared:SSL:1m;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDH:AESGCM:HIGH:RSA+3DES:!RC4:!DH:!MD5:!aNULL:!eNULL;

    ssl_prefer_server_ciphers on;

 

    location / {

        proxy_redirect off;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://192.168.1.35:88;

        client_max_body_size 1000m;

    }

}

 

 

此配置为支持xp系统下ie8的https访问; 若抛弃xp系统下的ie8可 使用最新的nginx版本 并配置ssl_ciphers如下:

ssl_ciphers AWSGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;

 

注意此时一定要检查80、443端口的防火墙开启情况!在入站规则中进行配置!

 

4:nginx将http请求强制转到https地址

在nginx中 增加server如下:

#http请求强行转到https

server {

    listen 80 default_server;

    server_name www.xxxdomain.com xxxdomain.com;

    rewrite ^/(.*) https://$server_name$request_uri? permanent;

}

 

三:nginx配置https跳转到tomcat二级域名站点

  因为使用了nginx作为代理,所以为了简单部署就没有在tomcat上部署ssl证书了!由nginx和用户建立链接,并完成ssl握手,然后将请求以http协议转发给tomcat;tomcat响应内容通过nginx进行ssl加密返回给客户端!

  按照nginx的配置,增加以下server内容:

server {
    listen 443;
    server_name AA.xxxdomain.com;
    ssl on;
    ssl_certificate _.xxxdomain.com_bundle.crt;
    ssl_certificate_key _.xxxdomain.com.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH:AESGCM:HIGH:RSA+3DES:!RC4:!DH:!MD5:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
        proxy_pass http://192.168.1.32:8181;
    }
}
    

  

tomcat配置

在tomcat的server.xml 的 Engine 模块下配置一个 Value:

<Engine name="Catalina" defaultHost="localhost">

    <Valve className="org.apache.catalina.valves.RemoteIpValve"

        remoteIpHeader="X-Forwarded-For"

        protocolHeader="X-Forwarded-Proto"

        protocolHeaderHttpsValue="https" />

</Engine>

#X-Forwarded-For 获得实际用户的 IP

#X-Forwarded-Proto 识别实际用户发出的协议是 http 还是 https    

这样配置后就可以通过https方式访问二级域名站点了;https://AA.xxxdomain.com

 

部署过程中遇到的问题:

1):http的js,css 等静态资源被浏览器拦截无法访问

因为通过代理 模式,tomcat无法区分用户是通过https还是http访问的!默认使用了http响应了静态资源,就出现了无法访问的现象!

解决方法:tomcat 和nginx 双方都增加配置X-Forwarded-Proto ;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;#实际用户的 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #实际用户的 IP

proxy_set_header X-Forwarded-Proto $scheme; #实际的协议 http还 https

这些配置可以保障代码中request对象能够获取到用户的真实请求信息

 

2):端口使用问题

需要tomcat中配置redirectPort、proxyPort为443端口;如果使用非443端口则需要在上面的Value中增加httpsServerPort指定端口

<Connector port="8181" protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="443"

    proxyPort="443" />

<Engine name="Catalina" defaultHost="localhost">

<Valve className="org.apache.catalina.valves.RemoteIpValve"

    remoteIpHeader="X-Forwarded-For"

    protocolHeader="X-Forwarded-Proto"

    protocolHeaderHttpsValue="https" httpsServerPort="443"/>

    如果非443端口 需要添加httpsServerPort 指定对应端口

</Engine>

 

3):nginx upstream timed out 问题

在部署好之后,系统可以访问,但是非常慢,需要几十秒,但是http返回状态仍然是200!

错误日志:

upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after
a period of time, or established connection failed because connected host has failed to respond)
while reading response header from upstream, client: 115.193.163.195, server: AA.domain.com,
request: "POST /dataTrans/translogList HTTP/1.1", upstream: "http://[::]:8181/dataTrans/translogList",
host: "AA.domain.com", referrer: "https://AA.domain.com//dataTrans/index"

 

查了下具体是因为:nginx配置代理地址:proxy_pass http://localhost:8181;windows 把 localhost 解析为 ipv6 地址 ::1 用于本地回路测试了,所以会导致超时,如果使用ipv4的地址,速度就可以了!

将 proxy_pass http://localhost:8181; 改为 proxy_pass http://127.0.0.1:8181;

 

至此所有站点HTTPs部署完毕

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Server Application Error IIS密码不同步 MS D
    最近电脑出了一系列的问题,IIS能启动,但是不能正常访问.提示错误.记得没事养成看系统日志的习惯,先看系统日志有一些红色的叉叉,出现的频率非常高.MS DTC 事务管理器启动失败。LogInit 返回错误 0x2。具体的是什么服务,我就不写了,百度一下非常多. 我想出现这
    03-08
  • Visual Studio-IIS Express 支持局域网访问配置
    转自:http://www.itnose.net/detail/6132793.html注意:本人测试后,发现个问题,不知是我个人的VS问题还是普遍的。就是将配置文件中的新增的节点注释后,会导致页面调试的时候很难加载,一直转圈,出不来。痛苦使用Visual Studio开发Web网页的时候有这样的
    03-08
  • 开发 Web 服务 (SOAP) 并将其发布到 IIS
    开发 Web 服务 (SOAP) 并将其发布到 IIS
    1.首先我想将 SOAP 通信服务从用 Java/Axsis2 实现的遗留系统迁移到 C#我想将 SOAP 通信服务发布到 IIS 并使用 Soap UI 检查客户端的操作使用 .NET Framework 中包含的 ASP.NET asmx 提高开发效率.NETX 不包含 SOAP 通信工具二、开发环境 Visual Studio 2022.
    03-08
  • vs添加到附加进程调试(IIS页面调试) vs附加到进程调试不了
    vs添加到附加进程调试(IIS页面调试) vs附加到
    有时候单元测试不是很方便,通过页面调试接口会更直观,也跟容易发现问题(尤其是在页面传参的时候),这时vs添加到附加进程的调试方式就显得尤为重要了!步骤如下:1、首先是通过IIS建立网站,(前提是要先安装iis,网上教程很多且详尽)这里我已HYS.BT.V3项
    02-12
  • VS项目发布到本地IIS vs部署项目
    VS项目发布到本地IIS vs部署项目
      ①web项目,开发工具Visual Studio,语言C#  ②本地IIS,手机上或其他用户在和本地在同一个局域网(并不绝对是指同一个WIFI)内访问,同时要把防火墙关掉  ③IIS全名Internet Information Services,用来发布网站 二、步骤    1在开始菜单中搜索I
    02-10
  • Windows7下安装IIS出现“出现错误,并非所有的功能被成功更改
    Windows7下安装IIS出现“出现错误,并非所有的功
     1、开始,搜索输入UAC--选择 “更改用户账户控制设置” 2、调到最低 3、打开控制面板--》程序--》打开或关闭windows功能,去掉图里的2个选项,点确定,重启 4、重启后,再把这2个勾选上,注:indernet信息服务很多子项不勾选,需要手动展开到最底层进行
    02-10
  • asp.net mvc 发布到IIS测试,路径的引用问题
    asp.net mvc 发布到IIS测试,路径的引用问题
    之前做的一个ASP.NET MVCI应用程序,今天发布到IIS中进行测试,结果发现之前的很多引用的脚本文件和CSS文件都显示不正常,仔细一看原来是路径引用的问题。IIS里建的虚拟目录,但我在引用文件的时候都是使用的是站点根目录的方式,当时没有考虑到,我是菜鸟大
    02-10
  • IIS中实现http自动转换到https
    IIS中实现http自动转换到https修改以下文件:C:\WINDOWS\Help\iisHelp\common\403-4.htm 为以下内容!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"HTMLHEADTITLE该页必须通过安全通道查看/TITLEMETA HTTP-EQUIV
    02-10
  • IIS短文件名漏洞 IIS主要漏洞
    IIS短文件名漏洞 IIS主要漏洞
    Internet Information Services(IIS,互联网信息服务)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。危害:攻击者可以利用“~”字符猜解或遍历
    02-10
  • 错误">IIS 发布网站出现<compilation debug="tr
    参考:http://www.mamicode.com/info-detail-1180214.html原因是环境只安装到.net Framework 4.5 的版本(.net版本向下兼容 )解决方案:升级.net Framework修改为compilation debug="true" targetFramework="4.5"
    02-10
点击排行