https 正变得愈发重要,因为谷歌不止一次明确地强调会对那些配置了 https 的网站给予更高的排名。
在今年更新的课程里面 VPS 建站部分,我教了大家怎么用 LNMP 1.4 安装包自带的 SSL 安装模块进行证书安装。在以前的课程中我们用的是 lnmp1.3 版本,是手动去利用 Let's Encrypt 安装脚本去安装 SSL 证书的。
在一些情景下,我们总会碰到需要购买付费 SSL 证书的情况,比如以下情况的任意一种:
- Let's Encrypt 的免费证书虽然用着也 OK,但你希望安装一个效期更久的证书不需要担心短期会过期。
- 当你有多个二级域名网站的时候,你希望能共用一个 SSL 证书。
那么这些情况下你就可能会需要付费的 SSL 证书。
比如 Let's Encrypt 的免费证书有效期一般为 90 天,每隔 90 天之前就要进行续期(当然上一篇文章里我已经给了自动续期的教程指南)。
Let's Encrypt 证书经历过几次更新升级,名称改成 certbot 了。免费的证书脚本总是不断升级改版,连带着我也要定期去学习和修改相应的续期设置,提高了我的学习成本和时间占用,麻烦。
再比如我的这个博客,除了 www 之外,还有 static,还有 go 等二级域名,我希望能有一个泛域名 (wildcard) 证书,即支持任意域名 (*.liaosam.com),使得主站和二级域名站都能共用。
当然,以前的 Let's Encrypt 免费证书也是能满足我的需求的。~~但是从 Let's Encrypt 到 Certbot,以前多个域名可以一起生成证书,但现在的 Certbot 好像总是有这样那样的问题。~~
2018.11 月更新,LNMP1.5 版本的安装包已支持泛域名(Wildcard)证书安装。
版本介绍:https://lnmp.org/notice/lnmp-v-15.html
想到免费的不便,想到我除了主站之外子站也要用 SSL,最后,简而言之:我想直接用一个付费的泛域名证书 (wildcard certificate) ,一了百了。
于是我找到了一个国外 SSL 证书的 Reseller 买了 Comodo 的 ssl 证书:"PositiveSSL Wildcard Certificate",三年的费用一共是一百多美金。当然如果你没有多个二级域名网站,买另外一种证书即可,会很便宜,一年几美金即可。
2020 年更新:现在 Comodo CA 分出来一个 Sectigo CA,证书名也多出来一个 Sectigo PositiveSSL Wildcard Certificate。
如果你也需要购买付费证书的话,那么可以按照本文当中的过程来购买和配置安装。
一、购买你需要的 SSL 证书 {#_SSL}
SSL 的厂家有很多,比如说比较知名的有 Symantec,Comodo,GeoTrust,RapidSSL,OpenSSL 等。如果直接从这些厂商买的话,价格会比较贵。国内的一些云服务商就卖得更贵了,如阿里云,一个泛域名证书一年最低端的也要 1200 元,而这个价格在国外的代理商那里则是可以用三四年的价格。所以一般我们会选择从国外的 Reseller 那里买。
我是从这个网站:https://cheapsslsecurity.com/ 买的。
一般情况下,如果你只是建一个英文网站,或者建一个自己的中文博客,不需要使用到二级子域名,那么用这个 $6.95/yr 的单域名的证书 Positive SSL Certificate 或 $26.24/yr 的 OV SSL Certificate 就可以了。
至于我买的证书为什么价格贵,这是因为适用于 Sub-Domains 的泛域名 SSL 证书的单价就是定的高一些。估计是因为厂商觉得你有很多 sub-domains,应该是大企业,因此价格就定高了。
不过没事,不到一千块,用三年,咱也可以接受,不差钱!我是用 PayPal 买的,有双币信用卡也可以。
一开始没有地方创建账号,你只管选择证书产品,在提交购物车支付之前需要填写一些基本信息如邮箱地址,姓名等等。等支付成功之后,会自动创建好账号并收到邮件通知的。
买的时候注意看,有可能还有一些额外的优惠。以上的价格可能商家会不定期调整,只供参考。
正常外贸企业类型网站,不会用到多个二级域名的。即使建多语种网站,用子目录或者 WordPress 的 Gtranslate 插件即可,所以只需要购买便宜的 Positive SSL Certificate 即可。
购买成功的通知邮件 {#i}
购买付款成功之后,会收到来自于 CheapSSLSecurity 的订单确认邮件。
CheapSSLSecurity 发来的邮件里有如下提示:
CheapSSLSecurity 的主页上,你可能找不到登陆的入口。点击 My Account 可以登录,或者通过这个地址登陆:https://cheapsslsecurity.com/client/
或者,你随便点击一个产品,如:https://cheapsslsecurity.com/comodo/positivessl.html
在产品页面上方会有个 My Account。填写邮箱地址和密码即可登陆。
上面的截图里说的是什么?说的是要想使用 SSL 证书,就必须先要获得一个 CA 证书。获取 CA 证书要经历几个步骤,其中一个步骤是你必须先要获取一个 CSR(证书签发请求)。
二、生成证书前的配置页面 {#i-2}
付款完成后,你会自动转到一个 Begin Now 的页面,或者你在你的后台控制面板(My Dashboard)或者 Incomplete Order 页面,也会看到你的订单状态。
会有一个 Generate Cert Now 的按钮,点击它。
来到生成证书的页面,这个页面有 5 个步骤选项(这个页面经常会有些改动,有些选项自己看着选择即可)。
Select Your Order Type* (选择订单类型) {#Select_Your_Order_Type}
这一步,我们是新购证书。默认是 New,不用改动。
Choose your Automated Authentication Option* (选择验证方式) {#Choose_your_Automated_Authentication_Option}
为了验证域名的所有权,需要你选择验证方式。我推荐图中 1,2,3 这三种。一般情况下,看你网站现在是哪种情况可以访问。比如你现在已经启用了 https,那么可以选择第 2 种 https。如果还没有启用 https,可以选择 http 的这种。
推荐用第 3 种方式,使用 DNS 验证,在域名解析记录那里添加一条 CNAME 的解析记录,这种方式最简单。图中的 email 的方式不推荐。如果你用的是第 1 或第 2 种方式,怎么验证文件,请见本文评论区里的答复。(如果是 Re-issue 证书,建议选择 Http/Https File-Based 方式)
选择了 DNS 的方式,继续第三步:
Input CSR (Certificate Signing Request)* (这一步是填入证书的签发请求码) {#Input_CSR_Certificate_Signing_Request}
关于这一步,你可以按照它的提示访问这个网址,去自动生成 CSR 和 Private Key。https://cheapsslsecurity.com/ssltools/csr-generator.php
建议是用上面那个链接直接过去填写信息然后生成 CSR 以及下载 Private Key 的 txt 文本,这样方便一些。
当然,你也可以自己在服务器上生成 CSR 和 Private Key。方法如下:
自己服务器上生成 CSR 和 Private Key {#_CSR_Private_Key}
在 Xshell 中连接了 VPS 之后,执行下面命令:
cd /usr/local/nginx/conf/ && mkdir ssl (如果已有 ssl 目录则无需再创建 ssl 目录)
然后执行:
cd ssl
然后执行:
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out yourdomain.csr
请注意自行替换上面的 yourdomain 变成你的域名。
在生成 CSR 文件的时候,脚本会让你填写一些信息。如国家,省份,城市,公司名等等。
Organization Name 填公司名或个人名,Organization Unit Name 留空,
Common Name 写证书要使用的域名。看你购买的证书类型来写这里的域名:
- www.abcde.com(买的是一般 Positive SSL Certificate, 网站首页带 www,最常见)
- abcde.com(买的是一般 Positive SSL Certificate, 网站首页不带 www,用的是根域名)
- *.abcde.com(买的是 Positive Wildcard SSL Certificate,泛域名证书,覆盖多个二级域名)
Email Address 可以填写 QQ 邮箱地址。
A challenge password 可以填写你常用的密码(不太重要),An Optional company name 留空。回车。
OK,确定之后,就已经创建完成了。
用 XFTP 打开 /usr/local/nginx/conf/ssl ,可以看到里面有两个文件:private.key 和 yourdomain.csr
把 yourdomain.csr 文件下载到本地,用 notepad++打开,选中 -----BEGIN CERTIFICATE REQUEST----- 和 -----END CERTIFICATE REQUEST----- 中间的部分,这部分信息就是后面我们要用的。
复制这个 CSR 信息,填入 Input CSR 的表格里。
说明:建议还是直接用网页在线生成的方式创建 CSR 和私钥 Key,更方便也不容易出错。
三、验证网站域名所有权和 URL(Verify Your URL) {#_URLVerify_Your_URL}
继续完成下面的选项。
第四项默认不动,第五项选择 Nginx Server(如果你的 VPS 用的是 LNMP 环境的话),我是选择 Nginx Server,然后 Continue。
如果一切顺利无误的话,会转到验证的步骤。Verify Your URL。就是验证你的网站域名所有权。
1)Confirm The Domain You Submitted(确认你提交的域名) {#1Confirm_The_Domain_You_Submitted}
这里会显示证书要安装的具体域名,一般会是 https://www.abcde.com 的形式。如果你申请的是泛域名(wildcard)证书,这里应该是 https://*.abcde.com
2)Confirm Your Information(确认网站域名的信息) {#2Confirm_Your_Information}
没什么好说的,就是把你之前填写的内容再显示一遍。
3)Site Administrator Contact Information*(网站域名管理者的联系方式) {#3Site_Administrator_Contact_Information}
这一步如果域名管理者是你,你可以直接勾选 "Use account details for Admin Contact" 自动会使用你注册时填写的信息填入表单。
Technical Contact Information* 技术人员的联系方式,一样可以勾选快速填写。
Subscriber Agreement*(订阅协议) {#Subscriber_Agreement}
勾选前面两项。关于询问是否是 e-commerce website,我们建企业网站或个人博客选择 NO。如果你建的是 B2C 类带商城购物车结算之类的,可以选择 Yes 看看。
点击 CONTINUE。
添加 CNAME 解析记录 {#_CNAME}
完成上面的操作后,页面提示:
上面截图提供给我们一长串的 CNAME 域名。形式为二级域名:xxxxxxxxxxx.yoursite.com,这个是主机名,
把它指向值为 同样一长串二级域名的 yyyyyyyyyyyyyyyy.comodoca.com 网站。
这里,注意看截图。把此图里,你的域名前面的下划线标出的 CNAME 一串长二级域名部分 xxxxxxxxxxx 称为 A ,把下面整个红色框住的 yyyyyyyyyyyyyyyy .comodoca.com 称为 B。
OK,我们去域名注册商那里添加一下 CNAME 域名解析记录吧。本文中域名注册商为 Namesilo。
去 Namesilo 去添加 CNAME 解析记录 {#_Namesilo_CNAME}
**具体操作为:**在 Namesilo 登录状态下,点击顶部的 Manage My Domains,进入域名列表页。
看到你的域名,直接点击,进入域名操作页面 Domain Console:
点击 DNS Records(解析记录)右侧的 Update 链接,进入更新解析记录。
点击 Select the resource record type you want to creat 右边的 CNAME 链接,创建 CNAME 记录:
看图,点击 CNAME,在需要填写的记录栏处,HOSTNAME 里填写 A 那部分。
注意,别带根域名。填写成 xxxx.yourdomain.com 是错的,只填写 xxxx,即分配给你来验证的二级 CNAME 域名。
在 TARGET HOSTNAME 那里,填写 B 部分整个完整的一长串地址。
点击 SUBMIT,之后你会在下方的解析记录列表里发现多了一条 CNAME 记录,检查 CNAME 的 HOSTNAME 是否正确
然后点提交按钮。等待生效即可。一般 2 小时内即可生效。
OK。接下来完成这个解析的验证即可。你可以通过 https://cheapsslsecurity.com/ 后台的 My Dashboard 查看订单的具体状态。
然后就等待 CA 证书发放了。CA 证书的发放一般会通过电子邮件形式发到你的邮箱里。
四、收到 Cert 证书及相关证书的邮件 {#_Cert}
如果一切顺利,很快大概 12 小时内,你会收到一封来自 Comodo(或 Sectigo Certification Authority)的邮件,通知你 Certificates have been issued,附件有证书文件。
下载邮件中的证书文件附件,解压缩到本地,里面有四个文件,分别是:
- Root CA Certificate - AddTrustExternalCARoot.crt
- Intermediate CA Certificate - COMODORSAAddTrustCA.crt
- Intermediate CA Certificate - COMODORSADomainValidationSecureServerCA.crt
- Your PositiveSSL Wildcard Certificate - STAR_domain_com.crt (注意你们买的如果是 6.95 美金一年的 Positive SSL Certificate,这里就是 domain_com.crt )
五、证书及密钥文件上传 & 证书合并 {#i-3}
把证书压缩包里的 4 个证书全部上传到 VPS 的 /usr/local/nginx/conf/ssl 内。
以及之前的密钥文件 domain.com.key 也上传到 /usr/local/nginx/conf/ssl 内。
接下来合并一个主证书(域名证书+中间证书):
cat STAR_domain_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt >> bundle.crt
注意顺序:primary domain 证书在前,然后中间证书从下层往上层的顺序排先后。
然后再合成一个 trusted.crt(使用根证书+中间证书)
cat AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt >> trusted.crt
六、生成 dhparam {#_dhparam}
确保当前所处于 ssl 文件夹下,
cd /usr/local/nginx/conf/ssl
[root@li~123 ssl]# 下执行下面的命令:
openssl dhparam -out dhparam.pem 2048
一般就用 2048,有些人用了更高的安全测试分也会用 4096。随便。安静等待创建生成,大概需要 10 - 20 分钟。
成功后,文件夹 /usr/local/nginx/conf/ssl 内会多出一个 dhparam.pem 文件。
七、配置 Nginx Vhost Conf 文件 {#_Nginx_Vhost_Conf}
修改网站的 conf 配置文件。位置:/usr/local/nginx/conf/vhost/ 下。
在 443 Server 段的具体配置如下 (注意修改 xyz.com 为你的域名):
listen 443 ssl http2;
server_name www.xyz.com xyz.com;
root /home/wwwroot/www.xyz.com;
index index.html index.htm index.php default.html default.htm default.php;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_certificate /usr/local/nginx/conf/ssl/bundle.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/domain.com.key;
ssl_dhparam /usr/local/nginx/sslconf//dhparam.pem;
ssl_prefer_server_ciphers on;
keepalive_timeout 75;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:20m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /usr/local/nginx/conf/ssl/trusted.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;
include wordpress.conf;
#error_page 404 /404.html;
include enable-php.conf;
.......
下面的配置就不贴了,主要就是上面那段紫色字体部分。
修改完毕后,保存,上传覆盖。
八、重启 Nginx 服务 {#_Nginx}
service nginx restart
九、查看证书详情 {#i-4}
在 Chrome 或者 Firefox 浏览器中访问你的网站,点击地址栏左边的小绿锁图标。弹出点击证书(有效)
OK!搞定!
十、其它 SSL 证书工具 {#_SSL-2}
CheapSSLSecurity.com 网站上,还提供了一些 SSL 证书相关的实用工具,如果有需要可以看一下这个页面:
https://cheapsslsecurity.com/ssltools/
OVER!
喜欢这篇文章的朋友们,不要吝惜你们的赞哦!