100、nginx_https安全链接配置
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安全链接配置的更多相关文章
- mybatis源码数据库链接配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration ...
- 各种数据库maven的pom文件编写与ibernate链接配置
各种数据库Hibernate链接配置 Derby db driver maven dependency <dependency> <groupId>org.ap ...
- 原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误(修改内容有三处
原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误改有三: a) mysql 连接jar包版修改 b)类路径修改 c)配置连接池地址修改 因版本升级,首先要修改 1:mysql- ...
- jmeter数据库链接配置
通常使用数据库有3个要求,性能好.数据一致性有保障.数据安全可靠:数据库优化的前提也是这三个要求.有句玩笑话叫少做少犯错,不做不犯错.DB优化的思路就是少做,减少请求次数,减少数据传输量,减少运算量. ...
- Linux下MySQL远程链接配置
配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...
- nginx 超时配置、根据域名、端口、链接 配置不同跳转
Location正则表达式location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...
- centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
NAT的静态ip设置并且修改网卡名为eth0 1 cd /etc/sysconfig/network-scripts/ mv eno16777736 ifcfg-eth0 #修改名称 vi eth0 ...
- wifi链接配置
linux 命令行配置wlan无线网卡 无线网卡配置此页由Linux Wiki日(星期四) 09:28的工作基础上.本文介绍在Linux命令行界面中手动配置无线网卡的方法.目前流行的多数发行版都支持用 ...
- centos7.6 ssh远程链接配置
1.firewall增加22端口号 增加方式有两种,直接编辑firewall的public.xml增加 vi /etc/firewalld/zones/public.xml 进入后按i健光标移动到zo ...
随机推荐
- ActiveMQ FileServer漏洞(详细)
半个月前,巡检时发现服务器出现不明进程,对其进行了处理,由于当时没有做详细记录,在这里把大致过程描述一下. 症状: ps命令发现出现几个不明进程, 1.于/tmp下运行的,名称随机的进程.占用CPU高 ...
- Ubuntu 获取升级信息失败。可能网络有问题
升级Ubuntu系统时遇到的这个问题, 原因是默认的源不是国内的,而且还可能导致下载慢等问题. 1.备份源 cd /etc/apt/ sudo cp sources.list sources.list ...
- 034.Python的__str__,__repr__,__bool__ ,__add__和__len__魔术方法
Python的其他方法 1 __str__方法 触发时机: 使用print(对象)或者str(对象)的时候触发 功能: 查看对象信息 参数: 一个self接受当前对象 返回值: 必须返回字符串类型 基 ...
- 11.19 rpm:RPM包管理器
rpm命令的全称是Red Hat Package Manager(Red Hat包管理器),几乎所有的Linux发行版本都使用了这种形式的命令管理.安装.更新和卸载软件. 概括地说,rpm命令包含了五 ...
- 按时按登录IP记录Linux所有用户操作日志的方法
背景:Linux用户操作记录一般通过命令history来查看历史记录,但是如果因为某人误操作了删除了重要的数据,这种情况下history命令就不会有什么作用了.以下方法可以实现通过记录登陆IP地址和所 ...
- Linux(CentOS 7) 安全加固之非业务端口服务关闭 postfix port 25
目录 关闭TCP 25 端口对应的服务 1. 确认对应端口的进程 2. 查找与关闭对应服务 3. 确认结果,端口已关闭 关闭TCP 25 端口对应的服务 [0 root@Qvps /root] #ca ...
- 重新整理 .net core 实践篇————配置系统之盟约[五]
前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门. 不管是官方自带的服务,还是我们自己编写的服务都是用它来实 ...
- 字符串算法(string_algorithm)
format 作用 格式化输出对象,可以不改变流输出状态实现类似于printf()的输出 头文件 #include <boost/format.hpp> using namespace b ...
- Locust入门
Locust入门 Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就 ...
- GO学习-(19) Go语言基础之网络编程
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...