`
brandNewUser
  • 浏览: 453123 次
  • 性别: 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
分享到:
评论

相关推荐

    基于频率优先级的切换应用、优先级切换流程、参数配置.docx

    《基于频率优先级的切换应用、优先级切换流程、参数配置》 5G网络优化是一项关键的技术任务,其中,基于频率优先级的切换是优化策略的一部分,尤其在多频段同覆盖组网的情况下,它能有效提升网络效率。在高低频段同...

    JEECG切换数据库方法

    下面将详细阐述JEECG平台切换数据库的具体操作步骤及其背后涉及的相关知识点。 首先,了解数据库配置文件的重要性是进行数据库切换的第一步。JEECG平台在数据库操作方面主要涉及三个关键配置文件,它们分别是: 1....

    http https 切换

    标题 "HTTP HTTPS 切换" 涉及到的是...总之,从HTTP切换到HTTPS是提升网站安全性和用户信任度的关键步骤,它涉及到服务器配置、前端代码的修改以及证书管理等多个方面。理解并实施这个过程是现代Web开发中的基础技能。

    带SN切换网管参数配置.pdf

    根据提供的文件内容,以下是关于“带SN切换网管参数配置”的详细知识点: 1. 带SN切换开关配置 - 该配置是指开启特定的“带SN切换”开关,以实现移动网络中的小区切换功能。 - 配置路径为无线参数 -&gt; LTEFDD -&gt; E...

    西门子828D第三编码器的配置及模式切换.pdf

    以一台具有X、Y、Z轴的机床为例,如果X轴、Y轴和Z轴都配置为绝对值编码器,而U轴采用变频器控制,那么可以通过Easy Extend功能方便地配置和切换这些轴的编码器。例如,当Z轴的主编码器出现故障时,可以通过Easy ...

    中兴5G网相关测量、切换的配置ID号.zip

    这份名为"中兴5G网相关测量、切换的配置ID号.zip"的压缩包文件很可能包含了中兴5G网络在测量和切换过程中所使用的具体配置参数和ID,用于指导网络的高效运行。 5G网络的测量主要涉及以下几个关键知识点: 1. **...

    5G网优案例:因小区半径配置不合理导致5-5切换异常.docx

    当网络中出现切换成功率下降的情况时,往往需要对相关的参数配置及网络环境进行细致的分析与调整。本次案例关注的是德阳地区某5G站点的同频切换成功率问题,具体表现为SA同频切换出站间的成功率仅为93.49%,这一数值...

    经典实践_SRVCC切换流程和eNB侧配置方法介绍.pdf

    在eNB侧,需要配置SRVCC切换流程的相关参数,包括: 1. SRVCC切换流程的触发条件 2. SRVCC切换流程的判决算法 3. SRVCC切换流程的信令关键信元 三、SRVCC切换流程的判决算法 SRVCC切换流程的判决算法是指eNB侧对...

    IP网关快速切换

    在IT领域,网络配置是日常工作中不可或缺的一部分,尤其是在多网络环境下的工作,如办公室与家庭网络的切换。"IP网关快速切换" 提供了一种高效解决方案,它允许用户快速改变计算机的IP地址、子网掩码、默认网关以及...

    Twincat 切换到配置模式蓝屏

    标题 "Twincat 切换到配置模式蓝屏" 描述了一个在使用Twincad软件时遇到的问题,即当尝试将系统切换到配置模式时,计算机屏幕变为蓝色,也就是我们通常所说的“蓝屏死机”(Blue Screen of Death,BSoD)。...

    matlab开发-单击可配置子系统之间的切换

    本文将深入探讨如何实现“单击可配置子系统之间的切换”这一技术,以及与之相关的代码生成过程。 首先,让我们理解什么是可配置子系统。在MATLAB的Simulink中,可配置子系统是一种特殊的子系统,它允许你在运行时或...

    F5负载均衡器双机切换机制及配置专题V1.0-20050401-B.doc

    本篇文档详细介绍了F5 BIG-IP系统的双机切换机制,包括其通信方式、触发条件以及相关的安全机制。 **1. F5 双机的切换触发机制** F5双机系统采用心跳机制来监测两台设备的状态。心跳信息可以通过两种方式进行交互...

    LTE测量与切换

    "LTE 测量与切换" LTE 测量与切换是 LTE 网络中的一个重要概念,涉及到 UE 和 eNB 之间的测量和切换过程。本节将详细介绍 LTE 测量与切换...了解 LTE 测量与切换的过程和配置信息对于 LTE 网络的规划和优化至关重要。

    【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

    ### Data Guard Broker 配置详解 #### 1.1 Data Guard Broker 概述 Data Guard Broker(也称为 DGMGRL)是 Oracle 提供的一种工具,用于简化 Data Guard 配置管理和监控。它通过命令行界面(CLI)提供了一种灵活的...

    ios-工厂模式,动态配置,一键切换不同地图.zip

    在iOS开发中,"ios-工厂模式,动态配置,一键切换不同地图.zip"这个项目着重展示了如何使用设计模式,特别是工厂模式,来实现地图服务的动态配置和一键切换功能。这个功能对于那些需要同时支持多种地图服务(如百度...

    c# .net用 Reflection+Factory+Config实现可配置,可扩展。支持不同数据库切换

    在本例中,配置文件用于存储当前使用的数据库类型和相关连接信息,使得在不改变代码的情况下,仅通过更新配置就能实现数据库的切换。 4. IOC(Inversion of Control) IOC是一种编程范式,它将控制权从应用程序的...

    LTE 切换算法仿真

    在高铁环境中,由于用户设备(UE)移动速度快,与基站间的信号质量会快速变化,因此切换算法的设计至关重要。切换是LTE网络中维持通信连续性和服务质量的关键过程,它涉及到UE从一个小区(cell)到另一个小区的平滑...

    ABB机器人单周和连续运行模式切换的配置方法.docx

    本篇文章将详细解析如何配置ABB机器人从单周运行模式切换到连续运行模式,以及反之的步骤,帮助用户更好地理解和操作ABB机器人的控制系统。 首先,我们需要理解这两种运行模式的区别。单周运行模式(Single Cycle)...

    spring boot + mybatis(通用mapper) druid多数据源切换配置

    在实际的项目中,`demo-boot-multdata`可能包含了实现上述步骤的代码示例,包括Spring Boot的主配置类、MyBatis的Mapper配置、Druid的配置以及Service层的切换逻辑。通过分析这些代码,我们可以更好地理解如何在...

Global site tag (gtag.js) - Google Analytics