概述
http协议是明文的,也就意味着网站传输的数据只要被人抓包就可以看到其中的内容。为了提高安全性,我们需要https协议,其使用了ssl加密方式,由网站提供证书,其中包含了网站访问的RSA公钥,这样就开启了加密访问。
ssl证书有很多等级和功能,最基础的就是提供加密访问服务,高级的具有一定的认证,就像微博大V认证一样。当然有大V认证的证书就贵了。我们现在只要有最基础的加密能让浏览器不和谐到我们的网站就可以了,因此我们可以使用免费的certbot来生成证书。
certbot简介
这是一个很有良心的EEF发起的运动,旨在为全网络提供安全便(mian)宜(fei)的ssl证书,希望大家能够都用https协议。certbot提供了一种类似于软件使用的方式,全自动地为你的网站配置好证书(包括了网站认证,证书制作等系列过程),大大的降低了证书使用的门槛。
certbot安装
- 去cerbot的官网选择个环境,下个安装脚本,比如我的网站环境脚本是nginx,选完就下载了一个脚本叫certbot-auto.
- 把这个脚本用各种方式上传到服务器
scp certbot-auto root@example.com //一个scp的使用例子,详情可以百度一下scp
- 运行安装脚本
./certbot-auto
这样就自动装好了certbot这个软件了,可以使用指令certbot了(注意,只是软件装好了,并不是证书生成好了)
生成证书
因为有个自动认证的缘故,certbot要自己开个服务来确认到底你的域名是不是指向你这个服务器的。所以要先把自己的nginx服务关掉,防止自己的443端口占用了certbot将要使用的端口。
service nginx stop
接着正式配置自己的证书,每一个-d后面都是一个域名,可以无限添加,但是悲伤的是它不支持通配符域名..
certbot certonly --standalone --email admin@example.com -d example.com -d www.example.com -d other.example.net
指令运行结束以后会有提示,要么错误了给你一些错误信息,要么成功了会提示一个congratulation!,然后给你生成的*.pem证书文件路径。我们就有了一个证书了。
证书部署
举个例子,在上一步结束后我的证书是在/etc/letsencrypt/live/fafafa.com
到这个目录下会有这么几个文件cert.pem
chain.pem
fullchain.pem
privkey.pem
这些文件的功能是非正交的,只要其中的若干个组合一下就可以实现配置,并不一定要全部配置。而且其中的一个可以生成另外的几个文件,这个说来就要到pem证书生成体系里面讲了。
我们来看怎么配置到nginx上。
原来普通的http网站配置是
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name fafafa.com;
root /var/www/html;
}
现在加上ssl_certificate*的配置,并把端口改成443
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name fafafa.com;
root /var/www/html;
ssl_certificate "/etc/letsencrypt/live/fafafa.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/fafafa.com/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
检测并重启一下nginx
nginx -t
service nginx restart
开始访问你的https://fafafa/com吧!