CloudFlare有免费的SSL证书,如果仅仅是在CloudFlare后台中开启它的话,并不能做到全站加密,只能开启Flexible模式,而不是Full模式。
进入CloudFlare后台->SSL/TLS,可以看到第一项就是免费提供的SSL。这里有4种模式可选:Off(关闭SSL)、Flexible(视情况而定)、Full(全部加密,需要在服务器上部署证书,但CloudFlare不会检查证书的有效性)、Full(Strict)(严格模式,也就是全部加密,而且CloudFlare会检查服务器上的证书是否有效)。
在这里,我们的目标是开启Full模式,实现方式是:首先自签一个泛域名的证书,然后在Nginx中设置通过HTTPS访问网站,最后到CloudFlare中设置一下SSL模式。
当然,如果你是个强迫症患者,非要开启Full(Strict)模式,也是可以的,但服务器上就不能部署自签名的证书了,而需要一个有效机构颁发的证书,例如letsencrypt的证书。然而缺点显而易见:需要定期续期。使用自签名证书就不存在这个问题了,你想签多长时间的有效期就可以签多长时间,更换服务器时,也仅需要把证书文件拷到新服务器上。
准备工作
第一步,当然是确保你的DNS是CloudFlare的!
第二步,安装签发证书工具:OpenSSL
dpkg系:
apt-get install openssl
rhel系:
yum install openssl
签发证书
首先建立一个制作、存放证书的目录:
mkdir certificate
进入该目录,然后签发一个根域名的CA证书,第一步创建一个私钥ca.key:
openssl genrsa -des3 -out ca.key 2048
第二步,生成CA根证书(公钥):
openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
命令中,-days后面的7305是指证书的有效期,以天为单位,这里设置成了20年,手动滑稽。
执行命令后会让你填一堆地区、组织什么的东西,随便填就好,但注意期间会让你填写common name,也就是域名,这里填入的是你的根域名,例如eaimty.com。最后,你就得到了一个根域的CA证书。
之后生成一个给泛域名用的私钥:
openssl genrsa -des3 -out yourdomain.com.pem 1024
解密私钥:
openssl rsa -in yourdomain.com.pem -out yourdomain.com.key
生成签名请求:
openssl req -new -key yourdomain.com.pem -out yourdomain.com.csr
这一步中common name要填入泛域名,如*.eaimty.com,这样生成的证书可以供所有子域使用。
下一步还不能直接执行签名,否则会报错,要先修改一下openssl的配置文件:
vi /etc/pki/tls/openssl.cnf
找到其中的dir = ,把值改成./ca。
然后在你签发证书的工作目录中:
mkdir -p ca/newcerts
touch ca/index.txt
touch ca/serial
echo "01" > ca/serial
这样就可以正常执行签名了:
openssl ca -policy policy_anything -days 7305 -cert ca.crt -keyfile ca.key -in yourdomain.com.csr -out yourdomain.com.crt
这一步中的参数和上一步中的意义相同。
最后你会得到一个yourdomain.com.crt文件,把ca.crt中的内容粘贴到yourdomain.com.crt的最后,证书就签发完成了。
准备好yourdomain.com.crt(网站证书)和yourdomain.com.key(网站私钥),开始配置Nginx!
配置Nginx
这一步很简单,找到你的网站(所签发泛域名的所有子域名都可以用)的Nginx配置文件(通常是/etc/nginx/conf.d/下的XXX.conf),
修改server{}段listen 443 ssl;,添加ssl_certificate /path/to/yourdomain.com.crt;和ssl_certificate_key /path/to/yourdomain.com.key;两行。
测试Nginx的配置文件是否有错:
nginx -t
注意看是否报错。
重启Nginx:
systemd发行版:# systemctl restart nginx
init.d发行版:# service nginx restart
如果不确定是哪种发行版的话两个命令都试一试。
设置CloudFlare
进入CloudFlare管理界面,将Crypto->SSL改为“Full”。
现在通过浏览器进入https://你的网站/,你就会发现小绿锁出现了!就说明我们成功了!
最后设置一下http自动跳转至https,全站SSL就实现了。
版权属于:Jolly
本文链接:http://totoro.site/index.php/archives/67/
关于转载:原创文章,禁止转载
您好,这篇文章全文转载自我的博客(EAimTY的博客),但您并未标明正确的转载出处。
如我博客的关于页面所言,在未特殊标明的情况下,我的博客中的所有文章都以 CC BY-NC-SA 协议发布,请您尊重版权,将您博客中文章的出处正确地指向 https://www.eaimty.com/2016/10/configure-https-using-custom-ca-and-cloudflare.html ,谢谢!