超文本传输安全协议(HTTPS)因此安全为目标的HTTP通道,大略来说便是HTTP安全版。https由两个部分组成:HTTP+SSL/TLS,在http根本上加上了一层加密信息模块,做事端和客户真个信息插损胡都会通过TLS进行加密,传输的数据都是加密后的数据
为理解决HTTP协议的这些毛病,须要利用另一种协议:HTTPS。为了数据传输的安全性,HTTPS在http的根本上加了SSL协议,SSL依赖证书验证身份,并为浏览器和做事器之间通信加密;
SSL证书是一种数字证书,利用Secure Socket Layer协议在浏览器和web做事器之间建立一条安全通道,从而实现数据信息在客户端和做事器之间的加密传输,担保双方通报信息的安全性,不可被第三方窃听,而且用户可以通过做事器证书验证所访问网站是否真实可靠;

加密的HTTPS和HTTP的差异:超文本传输协议HTTP协议被用于在web浏览器和网站做事器之间通报信息,HTTP协议以明文办法发送内容,不供应任何办法的加密数据,如果攻击者截取了web浏览器和网站做事器之间的传输报文,就可以直接读取个中信息,因此,http协议不适宜传输一些铭感信息;
HTTPS加密,解密,验证完成过程如图所示:
首先客户端发送要求,做事端接管到要求之后并申请天生公私秘钥,同时将公钥证书发送给客户端,客户端收到之后并通过TLS进行解析验证,如果证书没有问题就会在客户端天生一个加密随机值,将随机值发送给做事端,做事端吸收到之后,用自己的私钥解密,从而得到这个随机值,然后通过这个随机值对内容进行对称加密。做事端将用私钥加密后的信息发送给客户端,末了,客户端用之前天生的私钥来解密做事器端发过来的信息,获取解密后的内容
1)客户端向做事端发起HTTPS要求,用户在浏览器输入https网址,然后连接到Nginx server的443端口2)做事端采取https协议有一套数字证书,该证书可以自行配置,也可以向证书管理组织去申请,该证书实在质是公钥和私钥3)将公钥传送给客户端,证书包含了很多信息,例如,证书的颁发机构,过期韶光等等4)客户端解析证书,由客户真个TLS完成,首先会验证公钥是否有效,比如颁发的机构,过期韶光等,如果发生非常,则会弹出警告信息,提示证书存在问题,如果证书没有问题,就会随机天生数值,然后用证书对该随机数值进行加密5)将证书加密后的随机值传送到做事器,让做事器获取该随机值,后续客户端和做事端可以通过该随机值来进行加密解密6)做事端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行了对称加密7)做事端将私钥加密后的信息发给客户端8)客户端用之前天生的私钥来解密做事端发送过来的信息,获取解密后的内容
2、关于SSL证书
互联网的安全通信,是建立在SSL/TLS协议之上,SSL/TLS协议的基本思路是采取公钥加密法,也便是,客户端先向做事器端索取公钥,然后用公钥加密信息,做事器收到密文后,用自己的私钥解密。通过这种加解密机制,可以保障所有信息都是加密传播,无法窃听,同时,传输具有校验机制,一旦信息被修改,可以急速创造,末了,通过身份证书机制,可以防止身份被伪装。由此可知,SSL证书紧张有两个功能:加密和身份认证。
目前市情上的SSL证书都是通过第三方SSL证书机构颁发的,常见可靠的第三方 SSL证书颁发机构有DigiCert、GeoTrust、GlobalSign、Comodo等。
根据不同利用环境,SSL证书可分为如下几种:
企业级别:EV(Extended Validation)、OV(Organization Validation)个人级别:IV(Identity Validation)、DV(Domain Validation)
个中 EV、OV、IV 须要付费,企业用户推举利用EV或OV证书,个人用户推举利用IV证书,DV证书虽有免费的可用,但它是最低真个SSL证书。它不显示单位名称,也不能证明网站的真实身份,只能验证域名所有权,仅起到加密传输信息的浸染,适宜个人网站或非电商网站。
3、利用OpenSSL天生私钥文件和CSR文件
Nginx配置HTTPS并不繁芜,紧张有两个步骤:签署第三方可信任的 SSL证书和配置 HTTPS,下面依次先容。
要配置HTTPS须要用到一个私钥文件(以.key结尾)和一个证书文件(以.crt结尾) ,而证书文件是由第三方证书颁发机构签发的,要让第三方证书颁发机构签发证书文件,还须要给他们供应一个证书签署要求文件(以.csr结尾)。下面大略先容下私钥文件和csr文件。
私钥文件:以.key结尾的一个文件,由证书申请者天生,它是证书申请者的私钥文件,和证书里面的公钥配对利用,在 HTTPS 握手通讯过程中须要利用私钥去解密客戶端发來的经由证书公钥加密的随机数信息,它是HTTPS加密通讯过程非常主要的文件,在配置HTTPS的時候要用到。CSR文件:CSR全称是Cerificate Signing Request,即证书签署要求文件,此文件里面包含申请者的DN(Distinguished Name,标识名)和公钥信息,此文件由证书申请者天生,同时须要供应给第三方证书颁发机构。证书颁发机构拿到CSR文件后,利用其根证书私钥对证书进行加密并天生CRT证书文件,CRT文件里面包含证书加密信息以及申请者的DN及公钥信息,末了,第三方证书颁发机构会将CRT文件发给证书申请者,这样就完成了证书文件的申请过程。
在申请SSL证书之前,证书申请者须要师长西席成一个私钥文件和一个CSR文件,可通过openssl命令来天生这两个文件,操作如下:
[root@iZ23sl33esbZ ~]# openssl req -new -newkey rsa:2048 -sha256 -nodes -out iivey.csr -keyout iivey.key -subj \公众/C=CN/ST=beijing/L=beijing/O=iivey Inc./OU=Web Security/CN=iivey.com\"大众
上面这个命令会天生一个CRS文件iivey.csr和私钥文件iivey.key。个中,干系字段含义如下:
C字段:即Country,表示单位所在国家,为两位数的国家缩写,如CN表示中国ST字段: State/Province,单位所在州或省L字段: Locality,单位所在城市/或县区O字段: Organization,此网站的单位名称OU字段: Organization Unit,下属部门名称;也常常用于显示其他证书干系信息,如证书类型,证书产品名称或身份验证类型或验证内容等CN字段:Common Name,网站的域名
接着,将天生的CSR文件供应给CA机构,签署成功后,CA机构就会发给我们一个CRT证书文件,假定这个文件是iivey.crt,在得到SSL证书文件后,就可以在Nginx配置文件里配置HTTPS了。
4、Nginx下配置SSL证书
要开启HTTPS做事,实在便是在Nginx上开启一个443监听端口,下面是HTTPS做事在Nginx下的配置办法,这里仅列出了server段的配置:
server { listen 443; server_name www.iivey.com; index index.php index.html; root /data/webhtdocs/iivey; sslon; ssl_certificateiivey.crt; ssl_certificate_keyiivey.key; ssl_prefer_server_cipherson; ssl_protocolsTLSv1 TLSv1.1 TLSv1.2; ssl_ciphersHIGH:!aNULL:!MD5; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-Xss-Protection 1; }
大略先容下上面每个配置选项的含义:
ssl on:表示启用SSL功能。
ssl_certificate:用来指定CRT文件的路径,可以是相对路径,也可以是绝对路径,本例是相对路径,iivey.crt文件放在和nginx.conf同级目录下。
ssl_certificate_key:用来指定秘钥文件的路径,可以是相对路径,也可以是绝对路径,本例是相对路径,iivey.key文件放在和nginx.conf同级目录下。
ssl_prefer_server_ciphers on:设置协商加密算法时,优先利用我们做事真个加密套件,而不是客户端浏览器的加密套件。
ssl_protocols:此指令用于启动特定的加密协议,这里设置为“TLSv1 TLSv1.1 TLSv1.2”,TLSv1.1与TLSv1.2要确保openssl版今年夜于即是openssl1.0.1 ,SSLv3也可以利用,但是有不少被攻击的漏洞,以是现在很少利用了。
ssl_ciphers:选择加密套件和加密算法,不同的浏览器所支持的套件和顺序可能会有不同。这里选择默认即可。
add_header X-Frame-Options DENY:这是个增强安全性的选项,表示减少点击挟制。
add_header X-Content-Type-Options nosniff:同样是增强安全性的选项,表示禁止做事器自动解析资源类型。
add_header X-Xss-Protection 1:同样是增强安全性的选项,表示防止XSS攻击。
5、验证HTTPS功能
Nginx的https配置完成后,须要测试下配置是否正常,这里供应两种办法,第一种办法是直接通过浏览器访问https做事,这里利用火狐浏览器进行测试,如果https配置正常的话,该当会直接打开页面,而不会涌现如下界面:
涌现这个界面,解释https没有配置成功,须要检讨https配置是否精确。而在打开https页面后,可能还会涌现一种情形,如下图所示:
这个征象是能够打开https界面,但是浏览器地址栏左边的小锁是灰色,并且有个黄色的感叹号,这解释这个网站的页面中可能引用了第三方网站的图片、js、css等资源文件,https认为页面有引用第三方网站资源的情形是不屈安的,以是才涌现了警告提示。办理这个问题很大略,将页面上所有引用第三方网站的资源文件下载到本地,然后通过本地路径进行引用即可。
修正所有资源文件到本地做事器后,再次通过https办法进行访问,浏览器地址栏左边的小锁自动变成绿色,并且感叹号消逝,如下图所示:
至此,nginx下配置https做事已经正常运行。
在浏览器下可以查看证书信息(证书厂商、证书机构、证书有效期等),点击浏览器地址栏的绿锁,选择查看证书,即可查看证书详细信息,如下图所示:
验证SSL证书状态还有其余一个方法,那便是通过供应的在线网站进行验证,读者可以通过https://myssl.com/网站或https://www.ssllabs.com/ssltest/网站进行在线测试,这些网站可以更详细的测试SSL证书的状态、安全性、兼容性等各方面的状态。