HTTPS

作者: 明翼 | 来源:发表于2020-04-02 20:10 被阅读0次

一 HTTPS由来

HTTP协议是一个明文协议,通过流量捕获工具可以很容易抓到交互的内容,所以各类安全性要求比较高的协议都采用HTTPS协议,通过HTTPS协议来完成通讯数据的加密。

除了完成数据的加密传输外,HTTPS还担负起数据完整性校验和身份认证的功能;数据完整性是保证了数据在传输过程中不被修改,而身份认证是为了解决,我们上的淘宝网站是真的淘宝网站的问题。因为我们在浏览器中输入网址:www.taobao.com不一定是真的淘宝网站,因为这中间牵扯到流量劫持等(简单来说你的主机上的DNS服务器被修改指到了黑客的DNS服务器,然后浏览器在做DNS请求的时候,对我们请求解析的域名返回一个非法地址);要证明这个淘宝网站是真的淘宝网站,需要HTTPS证书。现在的网站自动对网站做验证的,比如谷歌浏览器,在我们访问HTTP网站的时候,会显示不安全;在我们防问没有合法证书的HTTPS网站的时候,也会有您访问连接不是私密连接的提示:

http网站不安全提示 非法HTTPS证书提示

如果确认自己访问的网站是安全的,可以点击高级,继续访问。

二 关于HTTPS证书

HTTPS证书类似于我们的身份证,用于向访问者证明自己的身份,身份证是国家颁发的,基于对国家的信任,我们信任了身份证;所以为了让大家信任,HTTPS的证书也必须是权威的组织结构颁发的,由于世界上的网站很多,不能简单的有一两个组织来进行证书的颁发,还有基于安全考虑,采用分层级颁发证书的方式。如下图:


证书链

如上图我们的证书为最底下的绿色部分,我们的证书是由黄色部分的中间证书机构颁发的,而中间机构的证书是由根证书颁发的。
浏览器在做认证的时候,先发现我们的证书是中间的证书结构颁发,那它就继续对上认证,中间证书机构的证书是由谁颁发的,结果找到了最终的根证书,而根证书在浏览器里面内置的,所以可以自证的,这样通过证书的链把证书的身份证明了。在谷歌浏览器里面,我们可以看到网站的证书颁发情况,如下图:


证书 证书链展示

我们可以依次点出不同级别的证书机构的证书,查看它的证书情况。

三 证书分类

正如域名需要购买一样,证书也需要购买的,不同机构的不同类型的证书有不同的价格,从几十到成百上千的都有,区别在于一是证书链长度不同,长度越长解析起来速度会慢一些,越短越快,一般都是三级的。证书根据支持的域名来分,有支持单域名的证书,有支持多域名的证书。从认证的严格性来说,证书的类型包括OV证书,DV证书,EV证书。

类型/区别 DV SSL证书 OV SSL证书 EV SSL证书
审核内容 域名所有权 域名所有权;企业信息; 域名所有权;企业信息;第三方数据核查(邓白氏、114、律师函)
颁发周期 几分钟-几小时 2-3个工作日 5-7个工作日
使用年限 1-2年 1-2年 1-2年
浏览器显示形式 https+小锁标志 https+小锁标志 https+小锁标志+绿色网址+企业名称
适用对象 中小型企业网站、电子商务网站、电子邮局服务器、个人网站等 企业网站、电子商务网站、证券、金融机构等 银行、保险、金融机构、电子商务网站、大型企业等

不同的证书在浏览器上表现也不一样:


不同证书效果展示图 来自互联网

当然等级越高,申请的时候收费也越高,对于个人或小公司的网站来说,可以利用cerbot等工具到Let's Encrypt上申请免费证书,如果正规一点的用,也可以在淘宝上买一年100块左右的GeoTrust上单域名证书,挺好用的,比阿里上买的大几千的证书性价比高很多。

证书的申请过程中,如果是简单的DV证书需要你做域名和主机的绑定关系认证,有几种方式,有的是让你放一个文件在你网站的特定目录下;另外一个方式让你在DNS域名服务器上配置一条TXT记录,然后验证方通过请求来验证你的域名是你拥有的。

四 Nginx下证书的安装和配置

证书获取之后就是使用了,不同的web容器配置证书的办法是不同的,但是也都大同小异,我以Nginx为例来说明吧。
nginx 需要源码编译安装,这里面有两个原因,因为nginx对https的支持是依赖一个SSL模块的,默认的nginx服务器是没有的,二是如果你想支持更多TLS的特性,需要更高版本的Nginx,而更高版本支持SSL的nginx,对openssl的版本也有要求,升级这个可能会影响系统的其他模块,所以自己编译源码的方式更安全。

4.1 下载编译安装

##下载
wget http://nginx.org/download/nginx-1.17.9.tar.gz
#下载openssl  
wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz
#下载 zlib和pcre
#编译
./configure --prefix=/usr/local/nginx.1.17.9 \
--with-pcre=../pcre-xxx \
--with-zlib=../zlib-xxx \
--with-http_ssl_module \
--with-stream \
--with-openssl=../openssl-1.1.1f 

make && make install

--with-http_ssl_module 是指定添加SSL模块。
通过-V命令来查看nginx是否支持SSL模块,如下:

/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.17.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --with-compat --add-dynamic-module=../ModSecurity-nginx --add-dynamic-module=../ngx_http_geoip2_module-master --with-http_ssl_module

4.2 配置

修改nginx.conf配置:

   server {
        listen       443 ssl;
        server_name  www.example.cn;
        ssl_certificate          /usr/local/nginx/conf/conf/xxx.crt; #全链证书文件
        ssl_certificate_key      /usr/local/nginx/conf/conf/xxx.key; #私钥 key 文件
        ssl_stapling             on; #OCSP装订 优化项
        ssl_stapling_verify      on;
        ssl_session_timeout      1m;
        ssl_protocols            TLSv1 TLSv1.1 TLSv1.2; #最佳兼容性
        ssl_prefer_server_ciphers on;
        ssl_ciphers              ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA;
}

主要是:

  • ssl_certificate 配置全链证书
  • ssl_certificate_key 配置私钥key文件
    以上两项新版本可以配置多个。
  • ssl_ciphers 配置秘钥套件
  • ssl_protocols 支持的TLS协议版本

也许你想用户访问80端口的时候自动跳转,可以通过如下配置实现:

   server {
     listen 80;
     server_name localhost  www.example.cn;
     location / {
    rewrite ^/(.*) https://www.example.cn/$1 permanent;
     }
   }

好了,就到此结束吧!

相关文章

  • https VS https

    HTTPS=SSL+HTTPHTTP协议传输的数据是未加密的 ,也就是明文,因此使用HTTP协议传输隐私信息非常不...

  • HTTPS

    什么是HTTPS HTTPS(全称:Hypertext Transfer Protocol over Secure...

  • HTTPS

    HTTP 有以下安全性问题: 使用明文进行通信,内容可能会被窃听;(请求时,需加密) 不验证通信方的身份,通信方的...

  • HTTPS

    站点证书的有效性 SSL 自身不要求用户检查Web服务器证书,但大部分现代浏览器都会对证书进行简单的完整性检查,并...

  • Https

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采...

  • HTTPS

    1.为什么要有HTTPS2.HTTPS的工作原理3.密码学4.HTTPS的优缺点5.在iOS中使用HTTPS 为什...

  • HTTPS

    精悍小文:https是如何工作的? - 简书 急速开发系列——打造完善的https使用方案 - 简书

  • https

    摘自[白话Https]https://www.cnblogs.com/xinzhao/p/4949344.html...

  • HTTPS

    一、背景 对于大规模的购物、银行事务或访问机密数据来说,这些重要的事务需要将 HTTP和数字加密技术结合起来使用,...

  • HTTPS

    在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。本篇...

网友评论

      本文标题:HTTPS

      本文链接:https://www.haomeiwen.com/subject/awqfphtx.html