博客是上周建好的,但是如何把网站转成HTTPS对我来说一直是个难题(HTTPS简介),直到昨晚才刚刚解决,记录下来以防忘记。

HTTPS要求有SSL证书,对于囊中羞涩的我来说,免费的Let's Encrypt当然是最佳之选了,虽然它签发的证书有效期只有3个月,但是通过脚本可以自动续期。于是我在网上找了很多教程,当然也有大佬做好的一键脚本,但是由于我当初建站用的是LNMP的包,而这个包中自带了关于Let's Encrypt证书(泛域名证书)的自动申请与续费功能,因此我就直接使用该功能了,配合wordpress一个插件,可以实现傻瓜化的配置HTTPS。

申请证书

在申请之前,你需要准备好以下东西

1、申请好的域名(如godaddy,namecheap等等)

2、域名DNS服务商的名称及简称(如Cloudxns,dnspod,cloudflare等等)

3、域名DNS服务商的API Key,Secret或Token。

4、提前安装lnmp最新版(本文完成之时最新版为1.5)或者升级到1.5最新版(https://lnmp.org/

下面我们以DNSPOD为例,dnspod的API Token需要先登录你的控制台,进入用户中心 -> 安全设置 -> API Token如下图所示,

点击查看进入下图页面,并创建一个Token,你可以自定义一个名称。

点击确定之后,Token会创建成功,并弹出如下对话框,请将其文本复制或截图,并妥善保存(原因见图中重要部分所述)。同时你的邮箱(如果你是绑定了邮箱的话)会受到相同内容的邮件,请妥善保存。

务必注意上图信息中的 ID 和 Token,需要用这两个字段来组合成一个完整的 Token,组合方式为:"ID,Token"(用英文半角逗号分割),例如在本示例中,完整的 Token 为:13490,6b5976c68aba5b14a0558b77c17c3932 。

申请完Token后,下面在终端里将API操作所需的参数输出供程序使用,如DNSPOD即在终端中输入:

export DP_Id="123456"
export DP_Key="abcdef"

各不同的DNS服务商获取API方法和所需参数不同,具体见下表。

服务商名称服务商简称所需API参数获取API参数地址
cloudxnscxexport CX_Key="123456"点击访问
export CX_Secret="abcdef"
dnspod (cn大陆版)dpexport DP_Id="123456"点击访问
export DP_Key="abcdef"
aliyunaliexport Ali_Key="123456"点击进入
export Ali_Secret="abcdef"
cloudflarecfexport CF_Key="123456"点击访问
export CF_Email=" [email protected]"
linodelinodeexport LINODE_API_KEY="123456"点击访问
heheexport HE_Username="username"he 的用户名密码
export HE_Password="password"
digitaloceandgonexport DO_API_KEY="123456"点击访问
namesilonamesiloexport Namesilo_Key="123456"点击访问
awsawsexport AWS_ACCESS_KEY_ID=123456点击访问
export AWS_SECRET_ACCESS_KEY=abcdef
namecomnamecomexport Namecom_Username="username"点击访问
export Namecom_Token="123456"
freednsfreednsexport FREEDNS_User="username"freedns 的用户名密码
export FREEDNS_Password="password"
godaddygdexport GD_Key="123456"点击访问
export GD_Secret="abcdef"

下面开始生成通配符SSL证书,命令:

lnmp dnsssl dp
或者
lnmp dns dp

dp为域名DNS服务商的简称,如果使用的其他DNS服务商更换为其他DNS服务商的简称,可以在上面的表格里找到DNS服务商对应简称。

分别按提示输入域名、添加更多域名、网站目录、是否启用日志等选项,详细介绍可以看上图文字注释。

注意:如果要生成通配符/泛域名SSL证书,输入其他域名时不要输入www.lnmp.org 的域名,否则将生成失败!!!

如果之前输出的API参数没问题的话,等120秒就会生成完毕,并提示"Let's Encrypt SSL Certificate create successfully."。

使用插件

此时打开你的域名即可发现https的小绿锁已经出现了。但是你的网站如果之前已经建立并输出了大量内容的话,就算你现在用了https协议,但是不可能让全站所有的都换成https,对于wordpress来说:最主要的就是图片,因为它的图片地址存的是绝对地址;如果你的网站有大量的图片全是用的http,除非直接更新数据库里存的地址。而wordpress中有这样一个插件,可以帮助你一键解决相关的问题,它的名字叫做Really Simple SSL

你只需要打开wordpress的控制台,进入 插件-安装插件,搜索really simple SSL并安装即可。安装完成后点击 启用,该插件便可帮你完成最后的步骤,如下图所示

到此为止,一切就都完成了,下面就可以开始尝试你的https服务了!

补充说明

你也可以通过手动设置301跳转来强制开启HTTPS,下面以nginx为例进行说明。

http站点301跳转到https站点示例配置如下:

server {
listen 443 ssl;
server_name www.lnmp.org;
省略其他配置
}
server {
listen 80;
server_name lnmp.org;
return 301 https://www.lnmp.org$request_uri;
}

按上面例子修改完成后保存,执行:/etc/init.d/nginx restart 重启nginx,使其生效。此时打开你的网站,小绿锁应该已经出现了。

感谢

以上内容由lnmp.org提供的lnmp安装支持,部分内容参考了该网站的教程以及DNSPOD的帮助支持部分,在此一并表示感谢。