升级Https前的可行性验证(一)

升级Https之前的可行性验证

注意:自签证书和Nginx的安装都基于ContOS 6

一、如何申请OpenSSL自签证书

1、安装OpenSSL

(一)OpenSSL 工具下载

下载地址

(二)OpenSSL 安装

参考博客

  • 查看服务器是否安装有OpenSSL
    openssl version -a
    • 1
  • 将下载的OpenSSL源码上传至Linux服务器

    可以使用Xshell的Xftp工具。

  • 解压上传的.tar.gz压缩包
    tar -zxvf openssl-1.1.1-pre8.tar.gz
    • 1
  • 安装gcc编译器,如果已经安装请略过
    
    #如果系统安装了gcc编译器,如下图所示的gcc version
    
    gcc -v 
    
    #安装gcc
    
    yum install gcc-c++
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

  • 安装zlib库,如果已经安装请略过
    
    #检查是否安装zlib,如果安装如下图所示
    
    whereis zlib
    
    #获取zlib源码包
    
    wget http://zlib.net/zlib-1.2.11.tar.gz
    
    #切换到zlib源码包中
    
    cd zlib-1.2.11
    
    #安装zlib
    
    ./configure && make && make install
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

  • 安装OpenSSL工具
    
    #首先进入OpenSSL工具解压之后的目录
    
    cd openssl-1.1.1-pre8
    
    #--prefix=指定的安装路径
    
    ./config shared zlib  --prefix=/usr/local/openssl && make && make install
    
    #安装完成之后再当前目录再执行下面命令
    
    ./config -t make depend
    
    #然后进入OpenSSL的安装目录
    
    cd /usr/local
    
    #建立文件链接
    
    ln -s openssl ssl
    
    #打开etc下的这个ld.so.conf配置文件,然后再文本中添加/usr/local/openssl/lib
    
    vim /etc/ld.so.conf
    
    #执行命令使文件链接共享生效
    
    ldconfig
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 环境变量配置
    
    #打开etc目录下的profile文件
    
    vim /etc/profile
    
    #然后再文件的末尾添加如下内容
    
    export OPENSSL=/usr/local/openssl/bin
    export PATH=$OPENSSL:$PATH:$HOME/bin
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 重开命令窗口,加载环境变量

2、自签证书

参考博客

(一)生成根证书

  • 生成.key后缀私钥
    
    #生成私钥到指定目录
    
    openssl genrsa -out /usr/local/nginx/conf/rootca.key
    • 1
    • 2
    • 3
    • 4
  • 生成.csr后缀的证书申请文件
    
    #通过私钥生成申请文件到指定目录
    
    openssl req -new -key /usr/local/nginx/conf/rootca.key -out /usr/local/nginx/conf/rootca.csr
    • 1
    • 2
    • 3
    • 4
  • 生成.crt后缀的证书文件
    
    #通过私钥和证书申请文件,来自签证书
    
    openssl x509 -req -days 3650 -in /usr/local/nginx/conf/rootca.csr -signkey /usr/local/nginx/conf/rootca.key -out /usr/local/nginx/conf/rootca.crt
    • 1
    • 2
    • 3
    • 4

(二)通过根证书签发服务端证书

  • 生成.key后缀私钥
    
    #生成服务端私钥
    
    openssl genrsa -out /usr/local/nginx/conf/server.key
    • 1
    • 2
    • 3
    • 4
  • 生成.csr后缀的证书申请文件
    
    #生成服务端证书申请文件
    
    openssl req -new -key /usr/local/nginx/conf/server.key -out /usr/local/nginx/conf/server.csr
    • 1
    • 2
    • 3
    • 4
  • 生成.crt后缀的证书文件
    
    #签发服务端证书文件
    
    openssl ca -in /usr/local/nginx/conf/server.csr -cert /usr/local/nginx/conf/rootca.crt -keyfile /usr/local/nginx/conf/rootca.key -out /usr/local/nginx/conf/server.csr
    • 1
    • 2
    • 3
    • 4

二、Nginx 安装

1、安装Nginx

参考博客

(一)下载相关源码包

  • 下载Nginx源码包
    
    #通过wget命令来远程获取源码包到当前目录
    
    wget http://nginx.org/download/nginx-1.15.2.tar.gz ./
    • 1
    • 2
    • 3
    • 4
  • 下载Pcre源码包
    
    #通过wget命令来远程获取源码包到当前目录
    
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz ./
    • 1
    • 2
    • 3
    • 4

(二)安装

  • 安装Pcre
    
    #解压压缩包
    
    tar -zxvf pcre-8.40.tar.gz
    
    #切换到解压的目录中
    
    cd ./pcre-8.40
    
    #安装
    
    ./configure && make && make install
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 安装Nginx
    
    #解压压缩包
    
    tar -zxvf nginx-1.15.2.tar.gz
    
    #切换到解压的目录中
    
    cd ./nginx-1.15.2
    
    #安装
    
    ./configure && make && make install
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

2、安装Https模块

参考博客

  • 如果之前有安装过Nginx并且配置过nginx.conf,那么一定先做备份
    
    #备份配置文件,前面是文件名,后面携带备份时间
    
    cp nginx.conf ./nginx.conf.2018816
    
    #备份安装目录sbin中 nginx运行文件
    
    cp ./nginx/sbin/nginx ./nginx/sbin/nginx2018816
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 在源码目录下安装Https模块
    
    #备份安装目录sbin中 nginx运行文件
    
    cp ./nginx/sbin/nginx ./nginx/sbin/nginx2018816
    
    #先cd到源码包中
    
    #获取https模块到指定目录
    
    ./configure --prefix=./nginx --with-http_stub_status_module --with-http_ssl_module
    
    #编译
    
    make
    
    #将编译好的nginx运行文件复制到安装目录的sbin中
    
    cp ./objs/nginx /usr/local/nginx/sbin/
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 验证Https模块是否安装成功
    
    #通过命令查看Https模块是否安装成功,如果安装成功如下图所示
    
    /usr/local/nginx/sbin/nginx -V
    • 1
    • 2
    • 3
    • 4

3、启动Nginx验证是否安装成功

  • Nginx 常用的一些命令
    
    #测试nginx.conf文件是否配置正确
    
    ./sbin/nginx -t
    
    #启动nginx
    
    ./sbin/nginx
    
    #重启
    
    ./sbin/nginx -s reload
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 启动Nginx

    访问Nginx部署的服务器ip地址,出现如下图所示页面则表示安装成功。

三、Nginx 配置

1、Nginx 配置Https

(一)配置端口监听

listen       443 ssl;
server_name  10.3.1.2;
  • 1
  • 2

(二)配置证书

ssl_certificate      /usr/local/nginx/conf/server.crt;
ssl_certificate_key  /usr/local/openssl/bin/nopass-server.key;
  • 1
  • 2

(三)其他参数配置

ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;

server_tokens off;

ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、Nginx 配置请求重定向和代理

<!-- 配置重定向 -->
location = /xxx {
    return 302 http://10.3.1.2:18080/bms_core;
}

<!-- 配置代理 -->
location = /bms_core/ {
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.3.1.1:18080;
}

<!--
    注意:
        1、location后接的是请求匹配规则
        2、在代理时如果,转发的地址最后加了/,那么location后匹配的请求路径不会被代理到proxy_pass指定的路径后,如果不加/,那么location后的匹配路径就会添加在proxy_pass指定的代理路径后。示例:如果加/就会是这样http://10.3.1.1:18080,如果不加/就会使这样http://10.3.1.1:18080/bms_core/
        3、在代理配置时加上proxy_set_header Host $host:$server_port;的作用就是在代理时端口号就不会被去掉
-->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3、Nginx 配置项目静态资源

<!-- 静态资源配置
    注意:如果监听了80端口(Http)和445端口(https),如果不配置静态资源的代理,则会出现静态资源无法访问的情况。原因是因为,如果是一个Html页面,你在第一次访问的时候给你返回之后,在Html中引用的一个静态资源是重新发起请求去获取的,当请求到了80端口和445端口就会再次取来匹配location,因为这个时候没有配置就会出现静态资源无法访问。
    解决方案:1、配置静态资源代理
            2、将Nginx服务器作为静态资源访问服务器,然后再配置如果请求静态资源就去Nginx中去匹配,在实际改造中这样不现实,还是配置静态资源访问吧
    如果有更好的解决方案请在下方评论!!!
-->
location ~ \.(gif|jpg|png|js|css)$ {
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.3.1.1:18080;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4、Nginx Http和Https共存

<!--
    目前的Http和Https共存,我暂时是单独配置一个Http Server 和一个Https Server两个端口监听互不干扰,同样如果有更好的方案请在下方评论告诉我!!!
 -->
server {
        listen 80;
        server_name  10.3.1.2;

        location / {
            root html;
            index  index.html index.htm;
        }

        location = /bms_core/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;
            proxy_pass http://10.3.1.1:18080;
            #return 302 http://10.3.1.2:18080/bms_core;
        }
        location ~ \.(gif|jpg|png|js|css)$ {
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.3.1.1:18080;

        }

        location = /bms {
            return 302 http://10.3.1.2:18080/bms_core;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

5、我的nginx.conf配置文件的完整配置

worker_processes  4;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /usr/local/nginx/logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    upstream my_server{
        server 10.3.1.2:3128 weight=5 ;
        server 10.3.1.2:80 weight=1;
     }

    server {
        listen 80;
        server_name  10.3.1.2;

        location / {
            root html;
            index  index.html index.htm;
        }

        location = /bms_core/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;
            proxy_pass http://10.3.1.1:18080;
            #return 302 http://10.3.1.2:18080/bms_core;
        }
        location ~ \.(gif|jpg|png|js|css)$ {
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.3.1.1:18080;

        }

        location = /bms {
            return 302 http://10.3.1.2:18080/bms_core;
        }
    }

    server {
        listen       443 ssl;
        server_name  10.3.1.2;

        ssl_certificate      /usr/local/nginx/conf/server.crt;
        ssl_certificate_key  /usr/local/openssl/bin/nopass-server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        server_tokens off;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location = /xxx {
            return 302 http://10.3.1.2:18080/bms_core;
        }

        location = /bms_core/ {
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.3.1.1:18080;
        }

        location ~ \.(gif|jpg|png|js|css)$ {
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.3.1.1:18080;
        }

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

四、验证Client到Nginx Https请求是否生效,Https请求中是否建立SSL握手

1、验证Https模块和Https Server配置是否生效

(一)通过使用Https请求Nginx

(二)需要注意的点

  • 使用OpenSSL进行自签证书,所得证书是不能被浏览器所信任的。
  • 如果实际业务并没有浏览器与服务端交互,那么就可以使用OpenSSL进行自签证书,签发证书的目的只是为了单纯的使用Https请求来提高数据安全性,关于Https为什么安全,请参考下面博客。

    Https参考博客

    SSL/TLS握手参考博客

  • 如果需要使用到受浏览器信任的CA证书,可以参考下面博客对CA证书签发机构的介绍,自己选择哪个签来机构来签发自己的受信任CA证书。

    收费证书申请推荐

    免费证书签发机构参考博客

2、Tcpdump使用

参考博客

#查看网卡名命令
ifconfig

#通过tcpdump抓包
#eth0为网卡名
#host 10.2.1.254为发起请求的客户端ip地址
#-w ./eth1.cap是将抓包信息输出到指定目录下指定文件中
tcpdump -i eth0 host 10.2.1.254 -w ./eth1.cap
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、Wireshark使用

参考博客

(一)查看抓包信息

在Wireshark中点击文件,然后打开抓包文件。

(二)查看TCP传输流

点击请求,然后右键追踪TCP流。

4、抓取Http请求

(一)查看是否发起Http请求

(二)追踪TCP流,查看数据包在TCP传输过程中是否是明文

5、抓取Https请求

(一)查看是否建立握手

(二)追踪TCP流,查看数据包是否加密

6、结论

(一)Http

? 通过Client向服务端发起的Http请求看到,客户端向服务端发起Http请求,并且通过追踪TCP流可以看到数据是明文传输没有被加密。

(二)Https

? 通过Client向服务端发起的Https请求看到,中间建立了TLS握手,并且通过追踪TCP流可以看到数据是使用对称加密后的数据。

原文地址:https://www.cnblogs.com/wanghuaijun/p/9562605.html

时间: 2024-10-05 23:08:01

升级Https前的可行性验证(一)的相关文章

记录一次升级https走过的坑

记录一次升级https过程中走过的坑 curl: (51) SSL: certificate subject name 'mp3.xxx.com' does not match target host name 'static.xxx.com' 升级 http://mp3.xxx.com http://static.xxx.com 为 https://mp3.xxx.com https://static.xxx.com 因在一台服务器上配置的两个域名都解析到本机,配置完后,发现页面的静态文件都无

Axis 1 https(SSL) client 证书验证错误ValidatorException workaround

Axis 1.x 编写的client在测试https的webservice的时候, 由于client 代码建立SSL连接的时候没有对truststore进行设置,在与https部署的webservice 连接会在运行时报出: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath

三步解决fiddler升级后https无法通过证书验证问题

1.      去掉 https 捕获选项 去掉勾选 2.      删除ie下的fiddler证书 将证书下的所有DO_NOT_TRUST_FIDDER证书都删掉 3.      配置https捕获选项 勾选弹出下图 选yes 选yes 再试就OK了 --特殊浏览器处理:firefox 一般装fiddler,如果本地有火狐就会启用fiddlerhook,当然新版火狐升级了安全设置,禁用了此插件,可通过about:config 中 xpinstall.signatures.required 设置

SAP HANA项目过程中优化分析以及可行性验证

在项目开发过程中,经常会遇到HANA模型运行效率的问题: 以我们项目为例,HANA平台要求模型运行时间不能超过10秒,但是在大数量和计算逻辑复杂的情况下(例如:ERP中的BKPF和BSEG量表的年数据总量超过20亿条),HANA模型的运行时间基本上都在1分钟以上.在不关联其它表,单单是几个板块的BKPF和BSEG表UNION ALL,运行时间都超过1分钟.鉴于这种情况,项目组对HANA模型是否存在优化空间,进行了分析和探讨,也请教了HANA平台的专家对HANA的优化给出可行性建议. 最终的分析结

Win server 2016 升级 Win server 2019 [测试验证]

. 给win server 2016 挂在 win server 2019 的安装盘 2. 点击setup 直接进行安装操作  选择不下载更新, 然后到达输入序列号的界面 序列号为: WMDGN-G9PQG-XVVXX-R3X43-63DFG 3. 选择桌面体验 4. 选择接收许可条约 然后选择需要保留的应用 5. 然后开始等待 6. 然后进入提示 7. 安装界面: 8. 根据磁盘性能 时间可能会很长,我这边大概一个小时左右才能完成这个界面 9. 第一次升级失败. 准备进行第二次升级. 第一次失

HTTPS请求 SSL证书验证

import urllib2 url = "https://www.12306.cn/mormhweb/" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} request = urllib2.Request(ur

http免费升级https 攻略(超简单)

1.注册沃通SSL免费证书 https://buy.wosign.com/FreeSSL.html 2.验证邮件域名,并下载证书 3.打开IIS,找到服务器证书选择导入,选择下载下来的证书 4.设置网站证书 5.当然我们也可以强行设置必须要通过 ssl 才能访问站点(此时,只有https才能访问,而http 就无法访问了) 另外,关于http地址重定向可以参考一下资料: 从微软的官方网站下载HTTP重写模块2.0(这里以64位为例),上传到服务器安装,下载地址:http://www.micros

httpclient 3.1跳过https请求SSL的验证

一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons-httpclient 3.1 的包.一般请求采用最新的httpclient4.5就可以了 <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</

升级 HTTPS,价值何在?

HTTPS 实质上是一种面向安全信息通信的协议.从最终的数据解析的角度上看,HTTPS 与 HTTP 没有本质上的区别.对于接收端而言,SSL/TSL 将接收的数据包解密,将数据传给 HTTP 协议层,就形成了 HTTP 数据.而 HTTPS 则是将 HTTP 数据包通过 SSL/TSL 层加密, 从而保证传输数据的安全性. SSL/TSL 是一个分层协议,共有两层组成,其中 SSL/TSL 握手协议允许服务方与客户方互相认证,并在应用层协议传送数据之前协商出一个加密算法和会话密钥.SSL/TS