`
brandNewUser
  • 浏览: 446519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

http切换至https相关配置

阅读更多
 
为了更好的用户体验,启用了https,需要去各大主机商那里购买SSL证书,https的好处大概以下几点:
 
1.数据传输加密,防止信息被窃取;
2.防止被欺诈,增加网站信任,防钓鱼;
3.防止被劫持;
 

部署了https的整体结构如图:

 



 

 
 
1.生成证书,使用openssl工具来生成对应的证书:
 
cd /etc/nginx
openssl genrsa -des3 -out server.key 1024         # 设置证书密码
openssl req -new -key server.key -out server.csr  # 根据提示输入各种信息
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
 
 
 
生成的csr文件包含了主要的证书信息,key文件主要包含了密钥交换和加密等信息,属于私钥,要保存好。将csr文件提交给CA厂商,会在几天后发给一份签好的证书文件 crt文件,同时会给你CA的证书链。
 
2.设置https证书
 
server
{
        listen 80;
        listen 443 ssl;
        server_name staging_activity.zhen.com;
        ssl_certificate      /usr/local/nginx/ca/server.cer;
        ssl_certificate_key  /usr/local/nginx/ca/server.key;
 
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
 
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
 
 
ssl_protocols,表示SSL的协议;ssl_ciphers参数指的是加密算法,根据自身机器openssl版本不同,支持算法也不同;ssl_prefer_server_ciphers表示服务端加密算法优先于客户端加密算法,防止降级攻击。
 
如果使用了知道创宇的服务,需要根据秘钥文件和证书文件,进行合成:https://www.yunaq.com/tools/certificate_composing/,并上传即可。
 
 

浏览器和nginx之间走的https,而nginx和tomcat之间是通过proxy_pass,走的是普通http连接。
 
在tomcat端的Host中需要增加:
 
<Valve className="org.apache.catalina.valves.RemoteIpValve"
                  remoteIpHeader="x-forwarded-for"
                  remoteIpProxiesHeader="x-forwarded-by"
                  protocolHeader="x-forwarded-proto"
            />
 
 
配置方案是浏览器和 Nginx 之间走的 HTTPS 通讯,而 Nginx 到 Tomcat 通过proxy_pass 走的是普通 HTTP 连接。 环境基础假定nginx、tomcat web服务已经安装并部署,crt(证书)和key(私钥)文件已经生成(本示例是用openssl生成的,生产环境可到第三方购买)。
 
nginx允许一个server同时支持http和https两种协议,可分别定义80和443两个协议和端口号,也可能单独配置使其仅支持https协议。
 
nginx收到请求后,将通过http协议转发给tomcat,由于nginx和tomcat在同一台服务器中,因此nginx核tomcat之间无需使用https协议。而正由于对于tomcat来说,收到的是普通的http请求,当tomcat中的应用发生转向请求时正常,我们需要告诉tomcat已被https代理,增加X-Forwarded-Proto和X-Forwarded-Port两个HTTP头信息。
 
下面是详细的配置(Nginx 端口 80/443,Tomcat 的端口 8080):
 
Nginx 这一侧的配置没什么特别的:
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    sendfile        on;
  
keepalive_timeout  65;
 
    upstream tomcat {
      server 192.168.1.xxx:8080;
    }
        
       # HTTPS server
       server {
           listen       443 ssl;
           server_name  192.168.1.xxx;
        
           ssl_certificate      ca/server.crt;
          ssl_certificate_key  ca/server.key;
 
           #ssl_client_certificate  /opt/nginx/ca/private/ca.crt;
        
           #ssl_verify_client       on;服务器验证客户端,暂时不开启
           ssl_session_cache    shared:SSL:1m;
           ssl_session_timeout  5m;
        
           ssl_ciphers  HIGH:!aNULL:!MD5;
           ssl_prefer_server_ciphers  on;
        
           location / {
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header Host $http_host;
               proxy_set_header X-Forwarded-Proto https;
               proxy_redirect off;
               proxy_connect_timeout      240;
               proxy_send_timeout         240;
               proxy_read_timeout         240;
               # note, there is not SSL here! plain HTTP is used
               proxy_pass http://192.168.1.xxx:8080;
           }
       }
 
}
 
 
其中最为关键的就是 ssl_certificate 和 ssl_certificate_key 这两项配置文件位置及相关访问权限请自行注意并更改,其他的按正常配置。不过多了一个 proxy_set_header X-Forwarded-Proto https; 配置。
 
最主要的配置来自 Tomcat,下面是我测试环境中的完整 server.xml:
 
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="443" proxyPort="443"
               URIEncoding="UTF-8"/>
  
 
 
以及后面的hostname:
 
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.RemoteIpValve"
                  remoteIpHeader="x-forwarded-for"
                  remoteIpProxiesHeader="x-forwarded-by"
                  protocolHeader="x-forwarded-proto" />
</Host>
  
 
上述的配置中没有什么特别的,但是特别特别注意的是必须有proxyPort="443",当然 redirectPort 也必须是443。同时 <Value> 节点的配置也非常重要,否则你在 Tomcat 中的应用在读取 getScheme() 方法以及在 web.xml 中配置的一些安全策略会不起作用。
 
需要值得注意的是,配置后tomcat的8080端口在外部依然可以直接访问,如果是集群环境,将会带来极大的安全隐患且此次配置也毫无意义了。所以应该在整个服务器局域网外围切断8080端口的访问(之前与第三方有交互并已经预定8080端口访问的服务可以酌情开放)并且在局域网内部开放8080端口的访问。 
 
 
http与https的自动跳转
 
在我们使用baidu时,如果没有使用http的话,也会直接转换成https,不需要用户手动操作,当前在我们的服务器中,既能支持http,也支持https,如果是恶意用户,可以不使用http进行操作,所以我们也需要增加这一功能。
 
需要将80和443拆开,443https端口仍然保持原样,80端口,使用301 http code转移至https:
 
server {
        listen  80;
        server_name home.xxx.com;
        access_log /usr/local/nginx/main.xxx.com.log  open1;
        return 301 https://home.xxx.com$request_uri;
}
 
  
301和302之间的区别可以参考:http://blog.csdn.net/qmhball/article/details/7838989,一个表示永久转移,一个表示暂时转移,对于用户来说,仅仅是一个跳转,浏览器中旧的url变成了新的url,但302可能会有URL规范化和网站劫持的问题,被搜索引擎判断为可疑转向,甚至认为是xx,因此我们这里采用301。
 
https仍然按照之前的配置即可:
 
server {
        listen 443 ssl;
        ssl_certificate      /usr/local/nginx/ca/server.cer;
        ssl_certificate_key  /usr/local/nginx/ca/server.key;
 
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

...
  
 
 
但内网我们使用的named服务,可以根据内网域名来进行请求分发,仅使用http,因此还需要为.net域名额外指定一个虚拟主机,因为是内网访问,所以仅支持http。 
 
 
 
  • 大小: 21.2 KB
分享到:
评论

相关推荐

    WAS9或WAS8配置HTTPS证书详细教程

    网上找这个WebSphere(was)中间件或者应用服务器的相关资料还是挺少的。这里是一份关于was如何配置https证书,实现https访问的教程。

    TD_LTE切换介绍

    LTE切换按网元划分,分基站内小区间切换,不同基站间X2切换(不同基站间配置有X2链路关系),站间S1切换(需要走S1链路,经核心网MME)。 切换流程包括切换测量,切换决策,切换执行三个阶段;  测量阶段,UE根据...

    相关主备切换配置信息 Dennis。。。。。

    相关主备切换配置信息 Dennis。。。。。

    5G问题定位指导书-切换专题.docx

    3.3 切换相关参数 14 3.3.1 切换触发事件 14 3.3.2 门限值应用 14 3.3.3 信令切换参数查看 16 4 切换相关KPI指标 17 5 NSA切换问题数据采集 17 5.1 终端侧Log采集 18 5.1.1 Probe 18 5.1.2 OMT 18 5.2 基站侧log采集...

    RestTemplate多种底层HTTP客户端类库的切换.docx

    RestTemplate只是对其他的HTTP客户端的封装,其本身并没有实现HTTP相关的基础功能。其底层实现是可以配置切换的,我们本小节就带着大家来看一下RestTemplate底层实现,及如何实现底层基础HTTP库的切换。

    微电网运行模式无缝切换控制策略

    针对微电网由孤岛转为并网时的切换过程,基于基尔霍夫定律进行推导得到逆变器相关变量间的数学关系,构建三相负荷不对称条件下微电网逆变器由独立运行转为并列运行的动态优化数学模型。利用基于Radau配置的动态优化...

    nginx负载均衡配置,宕机自动切换方式

    严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供...

    redis 主从复制,多个哨兵相关配置

    redis服务配置,配置redis主从复制,多个哨兵监控redis主服务,自动切换服务

    redis-keepavlied 相关配置

    redis + keepavlied 双击热备,相关配置及相关测试脚本

    论文研究-基于OpenFlow的移动切换框架研究.pdf

    现有移动切换的相关研究方案在实际部署时配置繁琐、工作量大、网络运维成本高,有些方案还存在三角路由问题,导致切换时延增大。为了解决移动切换过程中的这些问题,提高移动切换的性能,提出了一种基于OpenFlow的...

    SpringCloudAlibaba四Nacos Config 多环境切换与公共配置

    # 背景前面我们整合了Nacos Config,并验证了动态配置刷新的效果了,现在我们来进一步学习一下Nacos Config的多环境配置和通用环境配置相关的内容## 环境Windows10JDK1.8IDEA2021Maven2.6## 下载安装Nacos

    华为路由器配置手册

    第二章 接口配置命令 2.1 以太网口配置命令 以太网口配置命令包括: description mtu send-frame-type 2.1.1 description 设置以太网口描述。 description ethernet-description no description 【参数说明】...

    前端 JQuery 网页国际化 中英繁切换的实现示例

    下载后,直接点开HTML文件,无法实现转换。 需要用vscode等相关ide,使用“Open with Live Server”(来源于live server插件)打开该html,即可实习。

    异厂家互操作开关关闭导致NR-LTE切换失败5G网优案例.docx

    4、参数配置问题:5-4切换相关参数配置、互操作参数配置错误、IP链路配置等; 5、基站告警:目标基站出现断站、驻波等影响业务告警; 6、设备原因:设备隐性故障或异厂家匹配问题; 经分析,失败原因为NR切换到LTE...

    keepalive的介绍及相关强占模式配置

    keepalive的安装,虚拟iP的介绍,强占模式的切换,跟redis的组合实例配置

    服务器及相关硬件的配置需求.docx

    服务器及相关硬件的配置需求 服务器及相关硬件的配置需求全文共12页,当前为第1页。服务器及相关硬件的配置需求全文共12页,当前为第1页。服务器及相关硬件的配置需求 服务器及相关硬件的配置需求全文共12页,当前为...

    php环境搭建(PHP环境套件)支持700个php版本随意切换

    绿色集成环境PHPWAMP特点如下: ...8、多功能站点管理,自动定时重启服务器,自动定时重启Apache、mysql等相关服务。 其他功能自行摸索,很简单的可视化界面。(phpwamp默认数据库密码为168168,以前的低版本为空密码)

    window网卡IP管理配置工具

    IPtool是windows下一款网卡ip导入导出工具,支持静态ip、dhcp配置,适用于多网络划分环境下频繁切换网卡ip测试。 使用示例:使用iptool配置不同vlan下的网卡ip,切换网络时直接调用相关配置

    如何使用模拟开关动态切换音频和视频信号

    在切换音频和视频信号时,难点在于如何避免引入噪声,以及因设备电阻或附带电容导致的信号损失。虽然 CMOS 模拟开关既有效又高效,但设计人员需要了解关键的参数折衷才能正确使用它们。在音频或视频信号源间切换可能...

    php环境搭建、专业php环境套件下载(支持700个PHP版本随意切换)

    绿色集成环境PHPWAMP特点如下: ...8、多功能站点管理,自动定时重启服务器,自动定时重启Apache、mysql等相关服务。 其他功能自行摸索,很简单的可视化界面。(phpwamp默认数据库密码为168168,以前的低版本为空密码)

Global site tag (gtag.js) - Google Analytics