千帆运维陈园园 发表于 2016-12-14 14:30:52

关于AppStore 强制应用HTTPS,我们只需要这么做...

各位站长和技术:    苹果和谷歌相继发布了引导或者强制使用 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/etc/init.d/nginx reload

3. 生成证书mkdir /home/www/certbot/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/etc/init.d/nginx reload
      完整的 nginx 配置如下server {
    listen       80;
    listen       443 ssl;
    server_namebbs.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的命令来启用自动任务,命令行:
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,那么配置到此结束!参考: https://certbot.eff.org/docs/using.html#certbot-commands

针对 Windows服务器ACMESharp:https://github.com/ebekker/ACMESharpACMESharp安装方式有两种:
[*]如果你的服务器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-allOK,ACMESharp安装完毕我们来申请LE证书吧:管理员身份打开PowerShell第一步:导入ACMESharp模块Import-Module ACMESharp
第二步:初始化ACMEVault来保存和管理证书信息Initialize-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:      
* Challenge Token:
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:
* MIME Type:   
------------------------------------
执行完毕之后看返回结果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
...
Status         : valid
...
来检查验证状态:
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访问但是控制台会出现警告)
方案二:    使用阿里云 CA 证书服务,请参考https://help.aliyun.com/document_detail/28547.html
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



页: [1]
查看完整版本: 关于AppStore 强制应用HTTPS,我们只需要这么做...