欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

Let’s Encrypt, 让你的网站拥抱HTTPS

IT技巧 迷途小书童 4年前 (2020-01-15) 2633次浏览 0个评论

软硬件环境

  • ubuntu 16.04 server on vps
  • certbot

视频看这里

简介

本站之前在hostpark托管时, 由于 hostpark 本身提供了 https 的良好支持, 所以这块就没怎么去研究. 现在站点搭在了vps上, 再裸奔就不好了, 因此趁着这个机会, 查找了相关的资料, 把这块空缺给补上, 也让站点更加安全, 让访问者更加的放心.

先来看看设置前后的区别, 浏览器中URL的输入框

https_ssl_03

https_ssl_04

HTTP vs HTTPS

http 是一个传输网页内容的协议, 网站上的文字、图片、CSSJS脚本等文件都是通过 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 服务器

https_ssl_05

$ 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

然后出现一堆选择项, 根据实际情况填写就好了

https_ssl_01

https_ssl_02

相关的文件都默认存在与/etc/letsencrypt

证书的更新

最简单的方法,执行

certbot renew --quiet

默认情况下, 证书只有90天的有效期, 感谢xdtianyu, 这里有更新证书的详细方法.

nginx 和 tomcat的配置

我这里的环境是nginx + tomcatnginx 是通过 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"/>

参考资料

  1. https://letsencrypt.org/
  2. https://certbot.eff.org/
  3. https://github.com/xdtianyu/scripts/tree/master/lets-encrypt
喜欢 (0)

您必须 登录 才能发表评论!

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.