使用Let's Encrypt加密你的小站
介绍
Let's Encrypt是一个免费并且开源的CA,且已经获得Mozilla、微软等主要浏览器厂商的根授信。它极大低降低DV证书的入门门槛,进而推进全网的HTTPS化。
Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.
本文所有的操作均在Ubuntu14.04下进行安装和配置。
本文同步更新地址: 使用Let's Encrypt加密你的小站
安装
直接安装Let's Encrypt相对比较复杂和费事。为了简化安装步骤,我们就直接使用 Let's Encrypt 官网推荐的自动部署脚本Certbot。
根据环境选择,我们选择Nginx+Ubuntu14.04,进入官方推荐脚本页面,脚本如下:
$ sudo apt-get update
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
因为我本机已经有了python和Nginx,所以我的脚本简化为了
sudo apt-get update
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
接下来,我们要生成自己的证书。
- 获取证书前需要先停止 Nginx 服务
service nginx stop
- 生成单域名证书
certbot certonly --standalone --email your@email.com -d yourdomain.com
Tips:
yourdomain.com目前必须是你的绝对域名,因为Let's Encrypt暂时还不支持泛域名,但是根据官方的消息说,预计2018年一月,会实现支持。Wildcard Certificates Coming January 2018
到此,如果没有什么意外,执行完命令之后,你就可以看到你的证书创建成功的提示!默认是在 /etc/letsencrypt/live 路径下。
Nginx配置
有了证书,接下来我们就可以配置Nginx了。
进入Nginx的配置文件夹(/etc/nginx/sites-available/),创建一个ssl.conf配置文件,在里面增加一个server配置。
配置的内容,基本和监听http的配置相似,主要的区别是监听443端口和证书的加载,一个例子如下:
server {
# SSL configuration
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/123456.cloud/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/123456.cloud/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
try_files $uri $uri/ =404;
}
}
保存,然后reload ngxin(nginx -s reload)配置。这时候我们就可以在域名前加上https,就可以发现成功了!
仅限Https访问
有了Https,我们一般也就不想要http的访问了,或者说想把所有的http请求转为https。方法有很多种,我的方法是使用rewrite,把原先的Http全部转化为Https。
一个例子如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 123456.cloud;
rewrite ^(.*) https://$server_name$1 permanent;
}
自此,个人小站的Https加密工作完成。
Github Pages使用Https
一般来说,我们都会把自己的Github Pages博客定义成自己的域名。但是会发现,变为自己的域名之后,就没有Https了。所以为了能让我们的博客也用上Https,这时候也要折腾一下了。
原理很简单,就是用自己的服务器进行反向代理,实际上访问Github Pages博客就是访问自己的服务器。
我自己的配置如下,
server {
# SSL configuration
listen 443 ssl;
listen [::]:443 ssl;
ssl on;
server_name blog.123456.cloud;
ssl_certificate /etc/letsencrypt/live/blog.123456.cloud/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.123456.cloud/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://151.101.229.147;
}
}
这里需要注意的是,proxy_pass的地址是ping自己的Github Pages地址得到的,也就是那个.io结尾的地址。然后在你的域名提供商那里,修改你博客的A地址解析就可以了。
当然,如果这里你也仅限Https访问的话,把你的http监听也进行rewrite一下就好了!
证书续期
Let’s Encrypt 生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书。
为了方便,我们可以使用crontab进行自动续期。注意在使用certbot renew的时候,要先关闭nginx才能成功。
常见的问题
1、Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping
原因和解决方案:这是因为80、443端口被占用,解除对端口的占用即可,例如执行 service nginx stop _
2、DNS解析生效慢
解决方案:你的域名供应商一般都会提供DNS服务器,ping一下dns服务器,得到IP。然后在你本机的DNS配置里,换成ping DNS服务器得到IP既可。
3、Nginx配置不起作用,DNS也不起作用
解决方案:
(1)、换除Chrome以外的浏览器
(2)、在Chrome中,F12打开控制台,按住刷新按钮,选择‘清空缓存并硬性重新加载’
Chrome为了加快速度,这个的缓存机制倒是挺讨厌的。
使用Let's Encrypt加密你的小站的更多相关文章
- php密码对称encrypt加密
/** * 对用户的密码进行加密 * @param $password * @param $encrypt //传入加密串,在修改密码时做认证 * @return array/password */ ...
- PHP加密解密方法,使用openssl加密解密
/** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...
- C# 加密解密
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Secur ...
- [DEncrypt] Encrypt--加密/解密/MD5加密 (转载)
点击下载 Encrypt.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.Encrypt加密2.Encrypt解密3.Encrypt MD5加密看下面代码吧 /// <summar ...
- [Linux] 使用openssl实现RSA非对称加密
简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php 生成公钥私钥 使用命令生成私钥: openssl genr ...
- node.js解析微信消息推送xml格式加密的消息
之前写过一个解密json格式加密的,我以为xml的和json的差不多,是上上个星期五吧,我的同事也是在做微信公众号里面的消息推送解密,发现好像只能使用xml加密格式的发送到服务器,我们去年也做过企业微 ...
- RSA加密解密算法
/** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...
- 16: vue + crypto-js + python前后端加密解密
1.1 vue中使用crypto-js进行AES加密解密 参考博客:https://www.cnblogs.com/qixidi/p/10137935.html 1.初始化vue项目 vue i ...
- vue中使用cookies和crypto-js实现记住密码和加密
前端加密 使用crypto-js加解密 第一步,安装 npm install crypto-js 第二步,在你需要的vue组件内import import CryptoJS from "cr ...
随机推荐
- Java15-java语法基础(十五)——内部类
java16-java语法基础(十五)内部类 一.内部类: 可以在一个类的内部定义另一个类,这种类称为内部类. 二.内部类分为两种类型: 1.静态内部类: 静态内部类是一个具有static修饰词的类, ...
- Quartz.Net进阶之三:SimpleTrigger详述
以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...
- 2019年Python数据挖掘就业前景前瞻
Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...
- Python:每日一题003
题目: 一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? 程序分析: 在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果 ...
- Java多线程系列4 线程交互(wait和notify方法)
wait()/ notify()/ notifyAll() 任何Object对象都可以作为这三个方法的主调,但是不推荐线程对象调用这些方法. 1使用wait().notify()和notifyAll( ...
- centos7 安装maven
进入指定目录 cd /usr/local/src/ 下载maven 包 wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/bin ...
- 手机端table表格bug
table表格在手机端有一个小小的bug,就是td有一个右边线,解决办法可已给tr加一个背景色就行,或者table都行,完美解决
- OpenCV与QT联合开发示例
1.OpenCV及QT开发环境搭建 windows基于vs2017的opencv安装 windows下安装QT并与visual studio 2017搭建开发环境 2.工程创建 1.导入Qt项目 选择 ...
- python 引入本地 module
数据校验时,需要引入本地的一个告警python代码,引入的方式如下: import sys import os # 引入本地文件目录,或和需要引入的python文件放在同一个文件夹下 sys.path ...
- [Project] SpellCorrect源码详解
该Project原来的应用场景是对电商网站中输入一个错误的商品名称进行智能纠错,比如iphoae纠错为iphone.以下介绍的这个版本对其作了简化,项目源代码地址参见我的github:https:// ...