100.1、 tcp的三次握手和四次挥手的过程:

1、三次握手(建立连接):

第一次:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次:服务器收到SYN包,向客户端返回ACK(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态;

第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,也就是ESTABLISHED状态。

三次握手保证了不会建立无效的连接,从而浪费资源。

2、四次挥手(断开连接):

第一次: TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。

第二次:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

第三次:服务器关闭客户端的连接,发送一个FIN给客户端。

第四次:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

100.2、HTTP请求过程:

建立连接完毕以后客户端会发送响应给服务端

服务端接受请求并且做出响应发送给客户端

客户端收到响应并且解析响应响应给客户

100.3、https请求过程:

在使用HTTPS是需要保证服务端配置正确了对应的安全证书;

客户端发送请求到服务端;

服务端返回公钥证书到客户端;

客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端;

服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密;

客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户;

SSL加密建立;

100.4、安装nginx软件:

yum -y install pcre-devel openssl-devel

useradd nginx -M -s /sbin/nologin

tar xf nginx-1.8.1.tar.gz

cd nginx-1.8.1

./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.8.1

make && make install

ln -s /application/nginx-1.8.1/ /application/nginx

100.5、生成私钥和公钥:

[root@m01 ~]# cd /application/nginx/

[root@m01 nginx]# mkdir ssl #为证书创建目录

[root@m01 nginx]# cd ssl

1、生成私钥:

[root@m01 ssl]# openssl genrsa -des3 -out server.key 1024 #创建服务器证书密钥文件 server.key;

Generating RSA private key, 1024 bit long modulus

.............++++++

........++++++

e is 65537 (0x10001)

Enter pass phrase for server.key: #创建密码,后面要用到;

Verifying - Enter pass phrase for server.key: # 确认密码;

2、生成公钥:

[root@m01 ssl]# openssl req -new -key server.key -out server.csr #生成证书颁发机构,用于颁发公钥,server.csr;

Enter pass phrase for server.key: #创建服务器证书秘钥文件时输入的密码;

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN #国家代号, CN

State or Province Name (full name) []:AaHui #省的全名,拼音 AaHui

Locality Name (eg, city) [Default City]:HeiFei #市的全名,拼音 HeFei

Organization Name (eg, company) [Default Company Ltd]:Microsoft #公司的英文名字

Organizational Unit Name (eg, section) []: #部门的英文名称,可以不输入

Common Name (eg, your name or your server's hostname) []: #网站的域名,此时不输入

Email Address []: #电子邮件的地址,可以不输入

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: #可以不输入

An optional company name []: #可以不输入

106、生成标记证书,标记公钥和私钥:

[root@m01 ssl]# cp server.key server.key.org #备份服务器的秘钥文件

[root@m01 ssl]# openssl rsa -in server.key.org -out server.key #去除服务器秘钥文件的口令,因为以后要给nginx使用。

#每次reload nginx配置时候都要你验证这个PAM密码的,不方便,所以去除私钥的密码;

Enter pass phrase for server.key: #输入服务器秘钥文件创建时的密码;

writing RSA key

[root@m01 ssl]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #最后标记证书server.crt使用上述私钥server.key和公钥server.csr

Signature ok

subject=/C=CN/ST=AaHui/L=HeiFei/O=Microsoft

Getting Private key

107、配置nginx配置文件:

[root@m01 nginx]# cat conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 443; #ssl监听的端口号是443;

server_name localhost;

ssl on; #开启ssl; 如果把ssl on这行去掉,ssl写在443端口后面。这样http和https的链接都可以用;

ssl_certificate /application/nginx/ssl/server.crt; #证书路径,只有公钥会被发送到客户端;

ssl_certificate_key /application/nginx/ssl/server.key; #私钥路径;

ssl_session_timeout 5m; #ssl超时设置;

###############################################################

#通过重用Session提高https的性能:

#builtin:在OpenSSL中构建的缓存;仅由一个工作进程使用。缓存大小在session中指定。

#如果没有给出大小,则等于20480个会话。使用内置高速缓存可能导致内存碎片。

#shared:所有工作进程之间共享缓存。缓存大小以字节为单位指定;一兆字节可以存储大约4000个session。

#ssl_session_cache shared:SSL:10m;#官网上指出这种方法更高效;

################################################################

ssl_session_cache builtin:1000 shared:SSL:10m;

ssl_protocols SSLv2 SSLv3 TLSv1; #启动特定的加密协议;

ssl_ciphers HIGH:!aNULL:!MD5; #设置数据的加密方式;

ssl_prefer_server_ciphers on; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

108、测试:

109、https证书失效的问题:

安全证书不被信任:

通常在对安全性要求高的网站会使用安全证书来确保您的通信安全,防止被第三方攻击或窃听。

出现”安全证书不被信任“时,请按如下顺序进行排查:

1、检查电脑系统时间是否正确。错误的系统时间会造成证书过期或效验失败,请修改系统时间后再次访问网站。

2、是否使用了代理服务器。代理服务器会导致安全证书无效,可关闭代理服务器后再次访问网站。

3、是否公司专用在线办公网站。此类网站会采用自己生成的证书,非国际公认的安全机构所颁发,故不被浏览器信任。

安全证书不是“受信任的根证书颁发机构 ”颁发的:

SSL安全证书必须由浏览器中“受信任的根证书颁发机构”认证颁发。由不受浏览器信任的机构颁发的安全证书被称为“自签证书”,自签证书不受国际标准约束,

容易被假冒伪造,可被欺诈网站利用或用于中间人攻击,存在极大的安全风险。为确保用户访问安全,浏览器会提示“安全证书不受信任”,并告知用户“此网站出具

的安全证书不是受信任的证书颁发机构颁发的”。此类情况需谨慎处理,不推荐继续浏览此网站。网站经营者可采用受浏览器信任的SSL安全证书解决该提示,可使用免

费SSL证书或显示绿色地址栏的收费SSL证书。

安全证书已被吊销:

SSL安全证书已被颁发机构吊销,说明该安全证书已失效,浏览器会提示“安全证书不受信任”。

安全证书已过期:

SSL安全证书已过期,网站未及时更新,浏览器会提示“安全证书不受信任”。

安全证书认证域名与该网站域名不一致

为确保网站身份真实,SSL安全证书只能用于已被认证的网站域名上,如当前网站域名与安全证书已认证的域名不一致,浏览器会提示“安全证书不受信任”。

网络原因或数据被监听

因国家防火墙或是公司内网的网监系统,造成数据流量被劫持修改,从而出现证书异常,此类问题一般出现在您访问google的加密搜索,或是其他正规的加密网站。

此外,木马病毒对您网络流量的监听也可能造成证书效验失败。

100、nginx_https安全链接配置的更多相关文章

  1. mybatis源码数据库链接配置

    <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration        ...

  2. 各种数据库maven的pom文件编写与ibernate链接配置

    各种数据库Hibernate链接配置 Derby db driver maven dependency <dependency>         <groupId>org.ap ...

  3. 原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误(修改内容有三处

    原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误改有三: a) mysql 连接jar包版修改 b)类路径修改 c)配置连接池地址修改 因版本升级,首先要修改 1:mysql- ...

  4. jmeter数据库链接配置

    通常使用数据库有3个要求,性能好.数据一致性有保障.数据安全可靠:数据库优化的前提也是这三个要求.有句玩笑话叫少做少犯错,不做不犯错.DB优化的思路就是少做,减少请求次数,减少数据传输量,减少运算量. ...

  5. Linux下MySQL远程链接配置

    配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...

  6. nginx 超时配置、根据域名、端口、链接 配置不同跳转

    Location正则表达式location的作用  location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...

  7. centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1

    NAT的静态ip设置并且修改网卡名为eth0 1 cd /etc/sysconfig/network-scripts/ mv eno16777736  ifcfg-eth0 #修改名称 vi eth0 ...

  8. wifi链接配置

    linux 命令行配置wlan无线网卡 无线网卡配置此页由Linux Wiki日(星期四) 09:28的工作基础上.本文介绍在Linux命令行界面中手动配置无线网卡的方法.目前流行的多数发行版都支持用 ...

  9. centos7.6 ssh远程链接配置

    1.firewall增加22端口号 增加方式有两种,直接编辑firewall的public.xml增加 vi /etc/firewalld/zones/public.xml 进入后按i健光标移动到zo ...

随机推荐

  1. Keepalived+nginx高可用

    这种方法会把Keepalived进程结束掉,在教育机构学习到的方法,我个人对这种方法不认可. 参考: https://www.cnblogs.com/gshelldon/p/14504236.html ...

  2. Hive 安装和配置

    环境准备 已安装 HDFS 和 Yarn 集群环境 Windows 已安装 MySQL 8 (开启远程连接用户权限) 安装步骤 1. 上传并解压 Hive 安装文件 将 apache-hive-3.1 ...

  3. C++对象内存分布详解(包括字节对齐和虚函数表)

    转自:https://www.jb51.net/article/101122.htm 1.C++对象的内存分布和虚函数表: C++对象的内存分布和虚函数表注意,对象中保存的是虚函数表指针,而不是虚函数 ...

  4. nginx 配置 conf stream

    nginx从1.9.0版本开始,新增了ngx_stream_core_module模块,使nginx支持四层负载均衡.默认编译的时候该模块并未编译进去,需要编译的时候添加--with-stream参数 ...

  5. shell脚本编写习惯

    前言:在公众号看一篇比较不错的shell脚本文章,自己学习同时,加一些例子分享下,哪里做得不好,请多多指教哈一.在脚本写注释 1 #脚本的参数 2 #脚本的用途 3 #脚本的注意事项 4 #脚本的写作 ...

  6. unity ab包打包和加载的简单学习示例

    闲着没事结合项目看了下unity AssetBundle打包和使用,写了一些测试例子,需要的可以拿去,导入一个空项目即可 链接:https://pan.baidu.com/s/1H85dnMNkRoW ...

  7. 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...

  8. Jenkins代码自动部署相关文档

    环境 centos 7.0+ Java JDK 1.8+ jenkins 2.220 maven 3.0+ git 1.8+ 注意事项 一. linux 安装 JDK (jdk-8u201-linux ...

  9. Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退

    Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退   1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...

  10. 论文阅读:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    前言 CVPR2016 来自Korea的POSTECH这个团队   大部分算法(例如HCF, DeepLMCF)只是用在大量数据上训练好的(pretrain)的一些网络如VGG作为特征提取器,这些做法 ...