摘要:用于安全的数据传输。表明它使用了,但存在不同于的默认端口及一个加密身份验证层在与之间。申请证书网上已经有不少机构提供个人免费证书,有效期几个月到几年不等,博主使用的是申请成功后有效期年,到期后可免费续租。
前言
随着国内各大网站纷纷开启全站 HTTPS 时代,HTTPS 已不再是支付等敏感操作过程的专属,开启 HTTPS 对于个人网站或者小型网站也不再遥不可及。 今天博主就以自己的网站 www.rapospectre.com 为例叙述一下为自己网站点亮 HTTPS 小绿锁的过程。
HTTP 和 HTTPSHTTPS( Hypertext Transfer Protocol over Secure Socket Layer ),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL 。 它是一个 URI scheme( 抽象标识符体系 ),句法类同 http :体系。用于安全的 HTTP 数据传输。 https:URL 表明它使用了 HTTP,但 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP 与 TCP 之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
HTTP 超文本传输协议 ( HTTP-Hypertext transfer protocol ) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
从概念里可以看到,要开启 HTTPS 至关重要的一点就是 ssl 层的身份验证,而身份验证需要用到 ssl 证书,以前少有免费 ssl 证书,所以小站基本不会选择 https ,而现在网上提供个人免费 ssl 证书的机构越来越多,这使得免费升级站点为 https 成为可能。
1. 申请 SSL 证书网上已经有不少机构提供个人免费 ssl 证书,有效期几个月到几年不等,博主使用的是 StartSSL, 申请成功后有效期 3 年,到期后可免费续租。 具体申请过程不复杂,注册后根据提示验证网站 + 生成证书即可,如果不清楚可以 Google 一下。
要注意 StartSSL 验证网站拥有者时是给域名所有者的邮箱发验证邮件,如果域名开启了隐私保护请暂时关闭。
然后在自己服务器中生成 SSL 证书的 csr ,记住生成输入的秘密,之后要用到:
openssl req -new -sha256 -key rapospectre.com_secure.key -out rapospectre.com.csr
假设以上文件生成在 /var/tmp 文件夹下
在 StartSSL 填写 csr 文件内容,生成 SSL 证书并下载, 生成成果后如图:
点击 Retrieve 下载证书,解压缩后包含各种服务器的 crt ,博主使用 nginx 做反代,所以选择 nginxserver 解压缩后得到 www.rapospectre.com_bundle.crt 将此文件上传到服务器,假设传到 /var/tmp/ 文件夹
2. 配置服务器以 nginx 为例,打开 /etc/nginx/nginx.conf,加入配置:
server { listen 443 ssl; ssl_certificate /var/tmp/www.rapospectre.com_bundle.crt; ssl_certificate_key /var/tmp/rapospectre.com_secure.key; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #选择特定的加密方式, 避免已知的漏洞 ssl_ciphers "kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED"; #让浏览器记住直接访问 https 的网址, 不再去 http 重定向。 add_header Strict-Transport-Security "max-age=31536000; preload"; add_header X-Frame-Options DENY; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; keepalive_timeout 70; ssl_dhparam /var/tmp/dhparam2048.pem; #禁止服务器自动解析资源类型 add_header X-Content-Type-Options nosniff; #防XSS攻擊 add_header X-Xss-Protection 1; server_name www.rapospectre.com rapospectre.com;
在之前的 80 端口进行重定向配置:
server { listen 80; server_name rapospectre.com www.rapospectre.com; return 301 https://www.rapospectre.com$request_uri; }3. HTTP 替换
将网站所有以 http 方式获取的资源全部改为 https 方式或自动方式获取, eg:
改为 或
重启服务器,提示输入之前生成 csr 的密码,输入密码,重启成功,访问 https://www.rapospectre.com 可以看到 HTTPS 已经正常工作!
顺手来一发 SSLLABS测试,wtf 只有 F?
看图发现因为
This server is vulnerable to the OpenSSL Padding Oracle vulunerability ( CVE-2016-2107 )
原来是 OpenSSL 漏洞的锅,升级 OpenSSL 到 1.0.2h 版 ( 后续版本应该也可以,博主一开始升级到了最新的 1.1.0a 结果服务器挂了 ) 即可修复漏洞:
Fix OpenSSL Padding Oracle vulnerability (CVE-2016-2107) - Ubuntu 14.04
# Based on http://fearby.com/article/update-openssl-on-a-digital-ocean-vm/ $ apt-get update $ apt-get dist-upgrade $ wget ftp://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2h.tar.gz $ tar -xvzf openssl-1.0.2h.tar.gz $ cd openssl-1.0.2h $ ./config --prefix=/usr/ $ make depend $ sudo make install $ openssl version # OpenSSL 1.0.2h 3 May 2016 # now restart your nginx or other server $ nginx -s reload4. HTTP2
开启 http2 ,nginx 在 1.9.5 以后的版本才开始支持 http2 ,之前一直使用的是 spdy 而 ubuntu 自带的 nginx 是 1.4.6 的古董, 所以需要重新编译安装新版的 nginx ,博主选择了安装最新的 nginx 1.11.4:
1. 下载 nginx 到 /var/tmp/nginx:
wget http://nginx.org/download/nginx-1.11.4.tar.gz
2. 解压nginx-1.11.4.tar.gz文件
tar zxvf nginx-1.11.4.tar.gz
3. 进入ngixn-1.11.4文件夹
cd nginx-1.2.5
4. 查看nginx原来的配置
nginx -V
上面的命令将输出类似如下信息:
--with-cc-opt="-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" --with-ld-opt="-Wl,-Bsymbolic-functions -Wl,-z,relro" --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module
我们在后面加上 http2 模块与 上一步中 openssl 源码( 是源码路径不是安装 )路径:
--with-http_v2_module --with-openssl=/var/tmp/ssl/openssl-1.0.2h
注意,如果以上信息内包含 --with-spdy_module 请去除,nginx 1.9.5 之后已弃用 spdy
5. 执行configure命令,后面跟上原来nginx的配置
./configure --with-cc-opt="-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" --with-ld-opt="-Wl,-Bsymbolic-functions -Wl,-z,relro" --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --with-http_v2_module --with-openssl=/var/tmp/ssl/openssl-1.0.2h
configure时可能遇到的几个错误:
--with-http_xslt_module 时提示 the HTTP XSLT module requires the libxml2/libxslt libraries
apt-get install libxml2 libxml2-dev libxslt-dev
--with-http_image_filter_module 时提示 the HTTP image filter module requires the GD library.
apt-get install libgd2-xpm-dev
--with-http_geoip_module 时提示 the GeoIP module requires the GeoIP library.
apt-get install geoip-database libgeoip-dev
./configure: error: the HTTP rewrite module requires the PCRE library.
apt-get install libpcre3 libpcre3-dev
再次执行 configure 命令, 然后make && make install。 编译好以后objs目录下多出一个nginx文件,用它替换旧的 nginx 文件:
mv /usr/sbin/nginx /usr/sbin/nginx-backup cp objs/nginx /usr/sbin/nginx
执行/usr/sbin/nginx -t 命令检查配置文件返回下面的信息:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
表示 nginx 升级成功,修改 nginx 配置,加入 http2 支持:
listen 443 ssl http2 fastopen=3 reuseport;
重启 nginx 访问正常后再测一发:
搞定,个人网站加入 HTTPS 并且 SSLABS 评分 A+ 。 快来试试吧~
( 博主网站图片上传到七牛,而七牛免费似乎账户不支持 https 链接,所以有些文章比如说这篇会提示网页内有不安全的内容 )
原文地址:https://www.rapospectre.com/b...
作者:rapospectre
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39363.html
摘要:继上一篇如何打造一个全满分网站之后,这一次我们来谈谈如何打造一个在安全方面也能打满分的网站。无论如何,我们把一个安全得分只有的网站,通过各种方法优化到了得分为,是不是小有成就感呢你也来试一试吧 继上一篇《如何打造一个全满分网站》之后,这一次我们来谈谈如何打造一个在安全方面也能打满分的网站。因为对于一个网站来讲,仅有功能是不够的,还需要考虑性能,仅有性能也不够,还需要考虑安全。 由于网站...
很多人想要搭建自己的博客网站,但是又苦于没有什么代码基础,部分同学可能觉得申请虚拟主机管理空间等操作繁琐,于是苦苦寻找那种单纯的写作平台,例如早期的新浪博客,现在的简书、国外的WP等也就成为了不少人的选择。但是使用第三方的博客平台有一个最大的问题:不稳定。可能有的人会说大厂商不怕倒闭,纵观互联网这十几年的发展,再大的大牌服务如果没有赢利支撑,该倒闭的倒闭,该关停的关停。用户的利益对于商家来说不是高...
摘要:就拿本篇教程为例,发布第一篇文章。十分钟免费博客建站教程如果你没有自定义的路径的话,默认生成的文件都会在目录下。具体语法请移步官网最后附上我的博客链接嘤嘤嘤填坑小窝 title: Hexo+NexT+Heroku十分钟免费博客建站教程date: 2016-10-29 20:57:20author:嘤嘤嘤 前言(上一段废话抒发一下情感先) 接触互联网到现在不长不短也有两年了,从最开始连...
摘要:一些有用的一些有用的,包括转换小箭头三角形媒体查询等中文指南是当下最热门的前端资源模块化管理和打包工具。 nodejs 入门 nodejs 入门教程,大家可以在 github 上提交错误 2016 年最好用的表单验证库 SMValidator.js 前端表单验证工具分享 浅谈前端线上部署与运维 说到前端部署,可能大多数前端工程师在工作中都是使用的公司现成的部署系统,与SRE对接、一起完...
摘要:一些有用的一些有用的,包括转换小箭头三角形媒体查询等中文指南是当下最热门的前端资源模块化管理和打包工具。 nodejs 入门 nodejs 入门教程,大家可以在 github 上提交错误 2016 年最好用的表单验证库 SMValidator.js 前端表单验证工具分享 浅谈前端线上部署与运维 说到前端部署,可能大多数前端工程师在工作中都是使用的公司现成的部署系统,与SRE对接、一起完...
阅读 657·2021-11-23 09:51
阅读 3257·2021-10-11 10:58
阅读 15406·2021-09-29 09:47
阅读 3526·2021-09-01 11:42
阅读 1281·2019-08-29 16:43
阅读 1831·2019-08-29 15:37
阅读 2088·2019-08-29 12:56
阅读 1717·2019-08-28 18:21