软硬件环境
- ubuntu 16.04 server on vps
- certbot
视频看这里
简介
本站之前在hostpark
托管时, 由于 hostpark
本身提供了 https
的良好支持, 所以这块就没怎么去研究. 现在站点搭在了vps
上, 再裸奔就不好了, 因此趁着这个机会, 查找了相关的资料, 把这块空缺给补上, 也让站点更加安全, 让访问者更加的放心.
先来看看设置前后的区别, 浏览器中URL
的输入框
HTTP vs HTTPS
http
是一个传输网页内容的协议, 网站上的文字、图片、CSS
、JS
脚本等文件都是通过 http
协议传输到我们的浏览器, 通过浏览器的解析渲染, 才使我们看到精彩丰富的内容。但是 http
是明文传输的, 内容很容易被篡改, 很不安全.
https
的出现就是为了解决这样的问题, 它在 http
协议的基础上增加了一层 SSL/TLS
安全协议. 协议本身比较复杂, 可以简单的理解为SSL(Secure Sockets Layer)
和 TLS(Transport Layer Security)
是一个东西的不同阶段, 总之是特别安全就行了.
部署HTTPS需要什么
只需要有一张被信任的 CA(Certificate Authority)
, 也就是 SSL
安全证书, 这个必须是证书授权中心颁发的. 理论上我们自己也可以签发 SSL
证书, 但是这个证书, 肯定不会被主流浏览器所信任. 一般的 SSL
安全证书签发服务都比较贵, 如Godaddy
的, 一年的费用超过20美刀, 像我等穷人, 只能另谋它路.
幸运的是, EEF(Electronic Frontier Foundation)
、Mozilla
基金会和美国密歇根大学成立了一个公益组织 ISRG(Internet Security Research Group)
, 他们从2015年开始推出了 Let’s Encrypt
免费证书, 这个免费证书不仅免费,而且还相当好用, 我们就通过它来拥抱 HTTPS
.
实践
登录站点 https://certbot.eff.org/, 根据你的服务器的情况进行下拉选择, 这是一个安装向导, 它会智能的根据你的输入, 来给出相应的安装指令. 我使用的是 ubuntu 16.04
操作系统和 tomcat
服务器
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
安装完毕后执行
certbot certonly
然后出现一堆选择项, 根据实际情况填写就好了
相关的文件都默认存在与/etc/letsencrypt
下
证书的更新
最简单的方法,执行
certbot renew --quiet
默认情况下, 证书只有90天的有效期, 感谢xdtianyu, 这里有更新证书的详细方法.
nginx 和 tomcat的配置
我这里的环境是nginx + tomcat
, nginx
是通过 sudo apt-get install nginx
安装,tomcat
是下载的zip
安装包
修改/etc/nginx/sites-available/default
server {
listen 80;
server_name xugaoxiang.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name xugaoxiang.com,localhost;
ssl on;
index index.jsp index.html index.htm;
ssl_certificate /etc/letsencrypt/live/xugaoxiang.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xugaoxiang.com/privkey.pem;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_pass http://127.0.0.1:8888;
proxy_redirect http://127.0.0.1:8888 https://xugaoxiang.com;
}
}
tomcat的配置
修改server.xml
, 主要是修改端口,与 nginx
里的 proxy_pass
匹配起来就可以了
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>