为什么要用HTTPS
网站没有使用HTTPS的时候,浏览器一般会报不安全,而且在别人访问这个网站的时候,很有可能会被运营商劫持,然后在网站里显示一些莫名其妙的广告。
有HTTPS的时候,通俗地讲所有的数据传输都会被加密,你和网站之间的数据交流也就更加安全。
相关简介
Let's Encrypt
如果要启用HTTPS,我们就需要从证书授权机构处获取一个证书,Let's Encrypt 就是一个证书授权机构。我们可以从 Let's Encrypt 获得网站域名的免费的证书。
Certbot
Certbot是Let's Encrypt推出的获取证书的客户端,可以让我们免费快速地获取Let's Encrypt证书。
便宜SSL
便宜SSL是一家国内的SSL证书提供商,同样也拥有免费证书。而且提供丰富的工具: https://www.pianyissl.com/tools。
获取HTTPS证书
获取SSL证书的过程大体上都一样。既可以图形化,也可以命令行,最后实现的效果都完全一样,大家各取所需。
命令行
安装Certbot
进入Certbot的官网,选择你所使用的软件和系统环境,然后就会跳转到对应版本的安装方法,以Ubuntu + Nginx为例。
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 --webroot -w /var/www/example -d example.com -d www.example.com
这条命令的意思是为以/var/www/example
为根目录的两个域名example.com
和www.example.com
申请证书。
如果你的网站没有根目录或者是你不知道你的网站根目录在哪里,可以通过下面的语句来实现:
certbot certonly --standalone -d example.com -d www.example.com
使用这个语句时Certbot会自动启用网站的443
端口来进行验证,如果你有某些服务占用了443
端口,就必须先停止这些服务,然后再用这种方式申请证书。
证书申请完之后,Certbot会告诉你证书所在的目录,一般来说会在/etc/letsencrypt/live/
这个目录下。
图形化
进入便宜SSL的官网https://www.pianyissl.com,注册了账号之后,选择那个体验版的免费测试
,然后点确认购买。
输入域名并点击生成CSR并提交申请
按钮。
点击确定
按钮。
接下来会选择验证方式。
这里我选择邮箱验证方式,其它另外两种依照你的个人情况而定,反正就是为了验证域名是不是你的而已。
大约过几分钟,邮箱会收到一封验证邮件,如下图,复制②指向的一串验证码,点击①处的Here链接。
输入验证码,点击Next>
按钮。
提示已经输入正确的验证码,点击Close Window
。
大约等到10分钟左右,再次登陆https://www.pianyissl.com,进入个人中心,可以看到已经成功申请SSL证书,点击查看详情。
此时你可以点击箭头所指的证书打包下载,然后免费的SSL证书就可以下载到本地了,下载后可以看到SSL压缩包内的文件。
部署HTTPS证书
找到网站的Nginx配置文件,找到listen 80;
,修改为listen 443;
在这一行的下面添加以下内容:
ssl on;
ssl_certificate XXX/fullchain.pem; 修改为fullchain.pem所在的路径
ssl_certificate_key XXX/privkey.pem; 修改为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;
保存退出后,通过nginx -t
来检查配置文件是否正确,有错误的话改之即可。配置文件检测正确之后,通过nginx -s reload
来重载配置文件。
然后通过访问https://example.com
来查看是否配置成功。
如果发现无法访问或者是加载不出来的话检查一下443
端口有没有开启!
设置HTTP强制跳转HTTPS
上一步成功之后大家可能会发现通过原来的http://example.com
无法访问网页了,因为HTTP默认走的是80
端口,我们刚才将其修改为443
端口了。在这里我们可以在配置文件的最后一行加入以下代码:
server {
listen 80;
server_name example.com; 这里修改为网站域名
rewrite ^(.*)$ https://$host$1 permanent;
}
意思是每一个通过80
端口访问的请求都会强制跳转到443
端口,这样一来访问http://example.com
的时候就会自动跳转到https://example.com
了。
命令行下设置证书自动续期
有心的小伙伴可能会留意到我们刚才申请的整数的有效期只有90天,不是很长,可是我们可以通过Linux
自带的cron
来实现自动续期,这样就相当于永久了。
随便找一个目录,新建一个文件,名字随便起,在这里以example
为例,在里面写入0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"
,保存。
然后在控制台里执行crontab example
一切都OK了。原理是example
里存入了一个每天检查更新两次的命令,这个命令会自动续期服务器里存在的来自Certbot的SSL证书。然后把example
里存在的命令导入进Certbot的定时程序里。
附:
其它环境下的证书部署
https://www.pianyissl.com/support/
Nginx相关命令
nginx -t 验证配置是否正确
nginx -v 查看Nginx的版本号
service nginx start 启动Nginx
nginx -s stop 快速停止或关闭Nginx
nginx -s quit 正常停止或关闭Nginx
nginx -s reload 重新载入配置文件
crontab相关命令
cat /var/log/cron 查看crontab日志
crontab -l 查看crontab列表
crontab -e 编辑crontab列表
systemctl status crond.service 查看crontab服务状态
systemctl restart crond.service 重启crontab
参考文档
https://www.cnblogs.com/zoro-zero/p/6590503.html
http://blog.csdn.net/gsls200808/article/details/53486078
https://certbot.eff.org/#ubuntuxenial-other
http://nginx.org/en/docs/http/configuring_https_servers.html
22 条评论
[...]这个自动续费只针对certbot,certbot的证书一般只有三个月,但可以免费一直续,这个可以用linux的定时任务去处理。处理的方法可以查看 https://blog.lucien.ink/archives/81/[...]
卧槽,兄dia你这个博客太牛逼了,啥都有
emmm,因为之前并不明确自己要做什么,所以尝试的事情比较多。
也许是我见过最别具一格的博客了,哈哈,网站是自己开发的还是有现成的模板样式?
有现成的模版样式:https://www.ihewro.com/archives/489/
请问多个域名怎么共用一个证书
我一般是用 acme.sh 申请泛域名,参考 https://github.com/Neilpang/acme.sh/wiki
感谢指点, 请你呵阔落
很详细哦qwq
୧(๑•̀⌄•́๑)૭ 谢谢~
您好 用什么方法 可以把码云绑定上我自己的域名呢 域名跳转也行
用 nginx 反向代理一下?
之前搞这个也很迷,后来发现宝塔面板可以直接生成ssl,一键自动生成Let's Encrypt免费证书XD宝塔面板真的很方便
赞同,其实我现在也是在用宝塔面板。^_^
你那个自动邮件被gmail识别成垃圾邮件了,一直没看到。ヽ(ー_ー)ノ
我尝试过很多次,类似内容会被自动视为垃圾邮件,我已经放弃了,有时候我自己都看不到,通知邮件能不能看到一切随缘...
Hurrah, that's what I was searching for, what a material!
existing here at this blog, thanks admin of this web site.
Thanks for appreciation. ^_^
wdcp能否自动续期,我看文中的自动续期命令不适用于wdcp
没接触过 wdcp 呢,貌似是个 WEB 面板?面板里应该有自动续期的相关选项吧。
谢谢楼主,已经完成升级HTTPS,索然审核等待了半下午,但是楼主教程很详细,不需要太多步骤
不用谢,很高兴能够帮到你。^_^