各位站长和技术: 苹果和谷歌相继发布了引导或者强制使用 HTTPS 的公告,请看以下解读:事件一,苹果强制要求 APP 支持 HTTPS
2017年1月1日开始,Apple将在iOS10 和 OSX10.12 及以上版本中强制启用 https, 不支持 HTTPS 的 App 将不能上架 AppStore。通过在阿里云签发一张 Symantec/GeoTrust ov ssl 证书,并在服务器中开启 TLSv1.2 及以上版本 HTTPS 协议,使用完全正向加密算法, 并满足证书算法 SHA256withRSA,可使得 Apple APP 满足 ATS 的强制要求。
Apple ATS 要求:
1)协议版本 TLS 1.2 及以上;
2)使用完全正向加密算法;
3)数字证书必须 SHA256withRSA。 事件二,Google 到 2017 年 1 月开始显注标识 HTTP 网站不安全
2017 年,Google Chrome 浏览器将显示标识 HTTP 网站”Not Secure“,网页浏览用户看 到这种标识可能会直接选择停止 HTTP 网站的浏览,对网站业务造成损失。建议在阿里云上 签发一张 Symantec/GeoTrust ov ssl 证书,对原 HTTP 网站进行全站 HTTPS 化改造,让 用户访问网站时显示为可信安全站点。
针对以上,现有千帆框架下,需要使用 HTTPS 的有以下: 1.千帆APP 服务器 APP 的接口和后台域名 (由千帆运维团队配置) 2.论坛由千帆托管的,论坛相关域名 (由千帆运维团队配置) 3.论坛在站点本地,论坛相关域名,包括论坛主域名、子域名、附件域名 (由站点配置) 4.H5应用,使用反向代理的用户需要使用 HTTPS 域名(由站点配置) 5.APP 中发现窗内,如果有自己开发的或者第三方的应用也需要使用 HTTPS(由站点配置)
千帆运维团队为您提供了两套搭建 HTTPS 的方法: 1.使用 Let's Encrypt 给网站加 HTTPS (开源) Let’s Encrypt 项目是由互联网安全研究小组ISRG,Internet Security Research Group主导并开发的一个新型数字证书认证机构CA,Certificate Authority。该项目旨在开发一个自由且开放的自动化 CA 套件,并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。在过去的一年中,互联网安全研究小组拟定了 ACME 协议草案,并首次实现了使用该协议的应用套件:服务端 Boulder 和客户端 letsencrypt。目前LE的证书已经获得了所有浏览器的信任了(XP也可以支持了),在浏览器地址栏都会显示一个绿色可信任标志,证书90天有效期我们安装后需要定时任务每月续签一次证书就好了。 2.使用第三方证书供应商 对于技术能力不是很强的站点考虑该种方案
方案一:针对 Linux/Unix 内核服务器
1. 获取certbot并授权 - wget https://dl.eff.org/certbot-auto -O /usr/local/src/certbot-auto && chmod a+x /usr/local/src/certbot-auto
复制代码
2. 修改你的服务器配置,在server模块添加:
- vim /usr/local/nginx/conf/vhosts/bbs.domain.com.conf
复制代码
加入以下内容 - location ^~ /.well-known/acme-challenge/ {
- default_type "text/plain";
- root /home/www/certbot;
- }
- location = /.well-known/acme-challenge/ {
- return 404;
- }
复制代码
重启nginx
3. 生成证书 - echo yes|/usr/local/src/certbot-auto certonly --webroot -w /home/www/certbot/ --register-unsafely-without-email -d bbs.domain.com -d bbs2.domain.com
复制代码
命令中的bbs.domain.com和bbs1.domain.com请替换为您需要设置的域名,多个域名使用-d继续添加即可
生成成功结果返回如下: IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/bzok.adm.qianfanyun.com/fullchain.pem. Your
cert will expire on 2017-02-21. To obtain a new or tweaked version
of this certificate in the future, simply run certbot-auto again.
To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
4. 修改nginx配置,新增ssl配置 - vim /usr/local/nginx/conf/vhosts/bbs.domain.com.conf
复制代码
添加以下内容 - server {
- listen 443 ssl;
- ssl_certificate /etc/letsencrypt/live/bbs.domain.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/bbs.domain.com/privkey.pem;
- ssl_trusted_certificate /etc/letsencrypt/live/bbs.domain.com/chain.pem;
- // ... other settings ...
- }
复制代码
重启ngninx
完整的 nginx 配置如下 - server {
- listen 80;
- listen 443 ssl;
- server_name bbs.domain.com;
-
- ssl_certificate /etc/letsencrypt/live/bbs.domain.com/fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live/bbs.domain.com/privkey.pem;
- ssl_trusted_certificate /etc/letsencrypt/live/bbs.domain.com/chain.pem;
-
- access_log /home/logs/bbs.domain.access_log logstash;
- error_log /home/logs/bbs.domain.error_log;
- root /home/www/bbs;
- index index.php;
-
- include location.conf;
- include fastcgi.conf;
- location ^~ /.well-known/acme-challenge/ {
- default_type "text/plain";
- root /home/www/certbot;
- }
- location = /.well-known/acme-challenge/ {
- return 404;
- }
- }
复制代码
这里的bbs.domain.com是上面-d指定的第一个域名,添加了多个域名在live目录下会产生多个对应目录,需要对应配置 5. 自动更新证书 先在命令行模拟证书更新: - /usr/local/src/certbot-auto renew --dry-run
复制代码
模拟更新成功的效果如下: -------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/your.domain.com.conf
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/your.domain.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
既然模拟成功,我们就使用crontab -e的命令来启用自动任务,命令行:
添加配置:
- 30 2 * * 1 /usr/local/src/certbot-auto renew >> /var/log/le-renew.log
复制代码
上面的执行时间为:每周一半夜2点30分执行renew任务。您可以在命令行执行/usr/bin/certbot renew >> /var/log/le-renew.log看看是否执行正常,如果一切OK,那么配置到此结束!
针对 Windows服务器 ACMESharp安装方式有两种: - 如果你的服务器PowerShell版本是5.0以上,以管理员权限运行打开PowerShell执行:
- Install-Module -Name ACMESharp
复制代码
来安装ACMESharp,安装过程需要看网络情况,服务器有条件的用vpn安装,没条件的多尝试几次。
2. 如果你的服务器PowerShell版本是3.0 or 4.0的则麻烦些,先需要在powershell上安装chocolatey命令行包管理器,然后利用chocolatey安装。
在powershell中执行: - iex ((new-object net.webclient).DownloadString(‘https://chocolatey.org/install.ps1’))
复制代码
来安装chocolatey命令行包管理器,然后执行: - choco install acmesharp-posh-all
复制代码OK,ACMESharp安装完毕我们来申请LE证书吧: 管理员身份打开PowerShell 第一步:导入ACMESharp模块
第二步:初始化ACMEVault来保存和管理证书信息
第三步:在LE填写注册信息,接受注册协议 - New-ACMERegistration -Contacts mailto:somebody@example.org -AcceptTos
复制代码第四步:创建一个你要申请域名身份 - New-ACMEIdentifier -Dns myserver.example.com -Alias dns1
复制代码
第五步:认证域名所有权 如果是IIS web服务器执行: - Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = ‘Default Web Site’ }
复制代码
如果是其它web服务器,比如nginx需要自己配置的执行: - Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler manual
复制代码== Manual Challenge Handler - HTTP ==
* Handle Time: [1/12/2016 1:16:34 PM]
* Challenge Token: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0]
To complete this Challenge please create a new file
under the server that is responding to the hostname
and path given with the following characteristics:
* HTTP URL: [http://myserver.example.com/.wel ... QIOGaiRmx8MjAoA5QH0]
* File Path: [.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0]
* File Content: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms]
* MIME Type: [text/plain]
------------------------------------
执行完毕之后看返回结果LE的服务器在执行下一步时会访问你的这个地址: - http://myserver.example.com/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0
复制代码
返回的文本内容是: - 2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms
复制代码
.well-known文件夹在windows下可能不能直接创建,需要在命令行下创建。 如果准备好了,我们继续下一步。 第六步:提交认证 - Submit-ACMEChallenge dns1 -ChallengeType http-01
复制代码
提交之后我们接下来就需要等待LE服务器来验证了,我们可以通过命令: - Update-ACMEIdentifier dns1
复制代码来检查验证状态:
pedding 正在等待验证
valid 验证通过
invalid 验证失败,如果验证失败需要重新申请一次,也就是我们的第四步开始重新做一次,当然alias名称需要更换,因为已经存在记录了。 如果返回valid表示验证成功后我们继续下一步。 第七步:创建证书申请 - New-ACMECertificate dns1 -Generate -Alias cert1
复制代码
我们通过以下来检查证书的状态: - Update-ACMECertificate cert1
复制代码
如果结果像以上情况则表示申请完毕,我们来下载证书文件吧。 第八步:下载证书文件 下载私钥:
- Get-ACMECertificate cert1 -ExportKeyPEM "path\to\cert1.key.pem"
复制代码 下载LE证书:
- Get-ACMECertificate cert1 -ExportCertificatePEM "path\to\cert1.crt.pem" -ExportCertificateDER "path\to\cert1.crt"
复制代码
下载CA中间证书:
- Get-ACMECertificate cert1 -ExportIssuerPEM "path\to\cert1-issuer.crt.pem" -ExportIssuerDER "path\to\cert1-issuer.crt"
复制代码 下载IIS用的PFX文件:
- Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert1.pfx"
复制代码- Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert1.pfx" -CertificatePassword 'g1Bb3Ri$h'
复制代码
如果是nginx的话只需要利用到上面三个证书文件,这里有一个特殊的地方,在nginx中ssl证书是在server中加入ssl信息: - server {
- server_name www.xxx.com;
- listen 443;
- ssl on;
- ssl_certificate D://full.pem;
- ssl_certificate_key D://key.pem;
- }
复制代码其中full.pem是由LE证书文件和CA中间证书合并的来的,把CA中间证书内容添加到LE证书中合并为一个full.pem文件,作为公钥,另一个就是私钥key.pem。
配置好之后启动nginx直接在浏览器加上https访问你的域名吧! LE证书默认有三个月的有效期,我们可以每个月通过自动脚本来定是续订一个证书,续订证书的步骤就是命令行Import-Module ACMESharp导入模块后重复第七部和第八步然后应用新证书。 注意:在https站点中所有的外部资源都需要通过https访问,否则会抱安全错误(图片、视频等资源可以通过http访问但是控制台会出现警告)
方案二:
1.打开 https://common-buy.aliyun.com/?commodityCode=cas#/buy
2.点击购买,支付完成后,进入控制台,依次点击证书服务->补全
3.填写域名,这里以 test.qianfanyun.cn 为例
4.点击下一步后补全个人信息
5.点击创建
6.点击提交审核,弹框后点击确认等待审核
7.等待几分钟会收到邮件,或者直接点击进度查询,可以看到需要做 CNAME 解析
8.域名解析(以 DNSPOD 为例)
9.等待几分钟后,刷新页面点击下载
10.按照阿里云的提示到服务器上配置
至此阿里云 CA 证书服务已经配置完成,如果配置有问题,请及时提出。
千帆运维团队
2016.12.14
|