一 HTTPS由来
HTTP协议是一个明文协议,通过流量捕获工具可以很容易抓到交互的内容,所以各类安全性要求比较高的协议都采用HTTPS协议,通过HTTPS协议来完成通讯数据的加密。
除了完成数据的加密传输外,HTTPS还担负起数据完整性校验和身份认证的功能;数据完整性是保证了数据在传输过程中不被修改,而身份认证是为了解决,我们上的淘宝网站是真的淘宝网站的问题。因为我们在浏览器中输入网址:www.taobao.com
不一定是真的淘宝网站,因为这中间牵扯到流量劫持等(简单来说你的主机上的DNS服务器被修改指到了黑客的DNS服务器,然后浏览器在做DNS请求的时候,对我们请求解析的域名返回一个非法地址);要证明这个淘宝网站是真的淘宝网站,需要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;
}
}
好了,就到此结束吧!
网友评论