申请CloudFlare免费SSL证书并应用到nginx

/ 0评 / 63

原理

本示例中,将网站的IP接入CloudFlare的CDN达到隐藏IP的目的,同时开启CF当中的FULL SSL功能,全程对站点进行SSL加密,最终想要达到上述目的,还需要在站点当中的nginx配置https访问。访问路径如下

User——CF CDN——SITE

其中每一步都有https加密,用户访问域名是由CDN进行转发的,最终在访问到SITE,SITE本身进行了https访问处理。

将站点接入CF CDN解析

将原托管的网站DNS修改为CF的DNS,交由CF进行DNS解析,即可设置接入CDN

先注册CF网站

本节略过

将网站通过CF解析

添加站点

file

选择免费套餐

file

确认DNS指向

file

修改原站点DNS指向

本步骤即将原来站点接入CF的DNS进行管理,方便开启CDN。
完成此步骤,即代表站点开启了CF的免费CDN,可以尝试ping一下或者直接访问,IP会被隐藏

file

开启全站加密

开启全程加密之后,还需要在站点本身设置加密及证书,否则仅是用户访问CDN这一段路程进行加密,CDN转接site这一段并没有进行加密

file

申请CF的免费SSL证书

进入下列界面申请免费SSL证书,有效期15年,不用长期续期非常方便。
申请之前务必准备好记录措施,因为私钥只会显示一次,也只会有你一个人知道,如果错过只能重新申请一份证书

file

保存你的证书公钥和私钥

公钥是存放于网站,由浏览器用于验证的一部分,私钥则用于确认公钥的合法性,所以私钥需要保密,公钥是公开的。
CF给出的公钥和私钥是文本形式的,需要人为的去保存成对应的格式。

公钥
由-----BEGIN CERTIFICATE-----开头,记住是5个英文小横杠,结束也有类似的标示。
保存成pem后缀文件即可,文件名随意。

私钥
由-----BEGIN PRIVATE KEY-----开头,结束也有类似提示。
保存成key后缀文件即可,文件名随意。

站点启用SSL(https)

上传证书到站点

进入nginx的安装文件夹,一般是/usr/local/nginx/conf,创建一个cert文件夹用于存放证书,则最终证书存放目录如下

/usr/local/nginx/conf/cert

将证书的公钥和私钥传到这个文件夹即可,那么证书的绝对路径如下

公钥:/usr/local/nginx/conf/cert/public.pem
私钥:/usr/local/nginx/conf/cert/private.key

配置nginx开启https及443端口访问

一般nginx的配置文件在/usr/local/nginx/conf/nginx.conf,不同系统可能有所不同,可以通过命令ps aux | grep nginx看到正在运行的nginx进程,一般后面都会指向nginx的配置文件目录,按实际情况进行查找即可,举例如下

nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

打开配置文件后,会看到nginx的一些基本配置,一般来说都会有一个http{}配置,一个server{}配置,代表的是http访问的一些配置和服务器端的一些配置,一般server配置当中的应该是80端口,则代表普通的http访问。

那么我们定位到文件最后,把当前的server配置完全复制一份,此时的配置结构大概如下

http{

}
server{
    listen 80;
    ……
}
server{
    listen 80;
    ……
}

此时将第二个server定义为https访问即可,修改listen的端口80为443,并复制如下内容到listen后面即可,同时在listen 443后面加入空格default_server字样,表明默认访问https站点。

ssl on;
ssl_certificate /usr/local/nginx/conf/cert/public.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/private.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

此时你的conf文件结构应该大概如下

http{

}
server{
    listen 80;
    ……
}
server{
    listen 443 default_server;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/cert/public.pem;
    ssl_certificate_key /usr/local/nginx/conf/cert/private.key;           
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ……
}

到此所有配置完成,保存配置后重启nginx即可

service nginx restart

重启成功后即可使用https访问站点

(可选)配置http访问强制跳转

如果用户访问http版本的站点,那么站点是仍然可以正常访问到的,所以我们要对80端口的访问进行强制跳转到https访问,在上述的第一个server配置当中,加入如下参数即可

rewrite ^(.*)$ https://$host$1 permanent;

配置完成

至此,网站应该开启了https访问,并且通过CDN隐藏了真实IP,访问站点也会提示安全链接

file

啰嗦

TLS是互联网最后一道防线,没有这个你的站点就相当于裸奔,通过加密传输对访问者有益,对站点的管理用也有益。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据