千帆云

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5859|回复: 0
打印 上一主题 下一主题

[千帆动态] 关于AppStore 强制应用HTTPS,我们只需要这么做...

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
跳转到指定楼层
楼主
发表于 2016-12-14 14:30:52 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式 | 来自江苏
各位站长和技术:
    苹果和谷歌相继发布了引导或者强制使用 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并授权
   
  1. wget https://dl.eff.org/certbot-auto -O /usr/local/src/certbot-auto && chmod a+x /usr/local/src/certbot-auto
复制代码

2. 修改你的服务器配置,在server模块添加:

  1. vim /usr/local/nginx/conf/vhosts/bbs.domain.com.conf
复制代码

    加入以下内容
  1. location ^~ /.well-known/acme-challenge/ {
  2.             default_type "text/plain";
  3.             root     /home/www/certbot;
  4.         }

  5.         location = /.well-known/acme-challenge/ {
  6.            return 404;
  7.         }
复制代码

    重启nginx
  1. /etc/init.d/nginx reload
复制代码


3. 生成证书
  1. mkdir /home/www/certbot/
复制代码
  1. 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配置
  1. vim /usr/local/nginx/conf/vhosts/bbs.domain.com.conf
复制代码

        添加以下内容
  1. server {
  2.         listen 443 ssl;

  3.         ssl_certificate /etc/letsencrypt/live/bbs.domain.com/fullchain.pem;
  4.         ssl_certificate_key /etc/letsencrypt/live/bbs.domain.com/privkey.pem;
  5.         ssl_trusted_certificate /etc/letsencrypt/live/bbs.domain.com/chain.pem;

  6.         // ... other settings ...
  7.         }
复制代码

        重启ngninx
  1. /etc/init.d/nginx reload
复制代码

        完整的 nginx 配置如下
  1. server {
  2.     listen       80;
  3.     listen       443 ssl;
  4.     server_name  bbs.domain.com;
  5.    
  6.     ssl_certificate /etc/letsencrypt/live/bbs.domain.com/fullchain.pem;
  7.     ssl_certificate_key /etc/letsencrypt/live/bbs.domain.com/privkey.pem;
  8.     ssl_trusted_certificate /etc/letsencrypt/live/bbs.domain.com/chain.pem;
  9.    
  10.     access_log /home/logs/bbs.domain.access_log logstash;
  11.     error_log /home/logs/bbs.domain.error_log;
  12.     root /home/www/bbs;
  13.     index index.php;
  14.    
  15.     include location.conf;
  16.     include fastcgi.conf;

  17.     location ^~ /.well-known/acme-challenge/ {
  18.        default_type "text/plain";
  19.        root     /home/www/certbot;
  20.     }

  21.     location = /.well-known/acme-challenge/ {
  22.        return 404;
  23.     }

  24. }
复制代码

这里的bbs.domain.com是上面-d指定的第一个域名,添加了多个域名在live目录下会产生多个对应目录,需要对应配置
5. 自动更新证书
    先在命令行模拟证书更新:
  1. /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的命令来启用自动任务,命令行:

  1. crontab -e
复制代码

添加配置:

  1. 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执行:

  1. Install-Module -Name ACMESharp
复制代码

来安装ACMESharp,安装过程需要看网络情况,服务器有条件的用vpn安装,没条件的多尝试几次。
2. 如果你的服务器PowerShell版本是3.0 or 4.0的则麻烦些,先需要在powershell上安装chocolatey命令行包管理器,然后利用chocolatey安装。
在powershell中执行:
  1. iex ((new-object net.webclient).DownloadString(‘https://chocolatey.org/install.ps1’))
复制代码

来安装chocolatey命令行包管理器,然后执行:
  1. choco install acmesharp-posh-all
复制代码
OK,ACMESharp安装完毕我们来申请LE证书吧:
管理员身份打开PowerShell
第一步:导入ACMESharp模块
  1. Import-Module ACMESharp
复制代码

第二步:初始化ACMEVault来保存和管理证书信息
  1. Initialize-ACMEVault
复制代码

第三步:在LE填写注册信息,接受注册协议
  1. New-ACMERegistration -Contacts mailto:somebody@example.org -AcceptTos
复制代码
第四步:创建一个你要申请域名身份
  1. New-ACMEIdentifier -Dns myserver.example.com -Alias dns1
复制代码

第五步:认证域名所有权
如果是IIS web服务器执行:
  1. Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = ‘Default Web Site’ }
复制代码

如果是其它web服务器,比如nginx需要自己配置的执行:
  1. 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的服务器在执行下一步时会访问你的这个地址:
  1. http://myserver.example.com/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0
复制代码

返回的文本内容是:
  1. 2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms
复制代码

.well-known文件夹在windows下可能不能直接创建,需要在命令行下创建。
如果准备好了,我们继续下一步。
第六步:提交认证
  1. Submit-ACMEChallenge dns1 -ChallengeType http-01
复制代码

提交之后我们接下来就需要等待LE服务器来验证了,我们可以通过命令:
  1. Update-ACMEIdentifier dns1
复制代码
...
Status         : valid
...

来检查验证状态:
pedding 正在等待验证
valid 验证通过
invalid 验证失败,如果验证失败需要重新申请一次,也就是我们的第四步开始重新做一次,当然alias名称需要更换,因为已经存在记录了。
如果返回valid表示验证成功后我们继续下一步。
第七步:创建证书申请
  1. New-ACMECertificate dns1 -Generate -Alias cert1
复制代码

我们通过以下来检查证书的状态:
  1. Update-ACMECertificate cert1
复制代码

如果结果像以上情况则表示申请完毕,我们来下载证书文件吧。
第八步:下载证书文件
下载私钥:
  1. Get-ACMECertificate cert1 -ExportKeyPEM "path\to\cert1.key.pem"
复制代码
下载LE证书:
  1. Get-ACMECertificate cert1 -ExportCertificatePEM "path\to\cert1.crt.pem" -ExportCertificateDER "path\to\cert1.crt"
复制代码

下载CA中间证书:
  1. Get-ACMECertificate cert1 -ExportIssuerPEM "path\to\cert1-issuer.crt.pem" -ExportIssuerDER "path\to\cert1-issuer.crt"
复制代码
下载IIS用的PFX文件:
  1. Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert1.pfx"
复制代码
  1. Get-ACMECertificate cert1 -ExportPkcs12 "path\to\cert1.pfx" -CertificatePassword 'g1Bb3Ri$h'
复制代码

如果是nginx的话只需要利用到上面三个证书文件,这里有一个特殊的地方,在nginx中ssl证书是在server中加入ssl信息:
  1. server {
  2.     server_name www.xxx.com;
  3.     listen 443;
  4.     ssl on;
  5.     ssl_certificate D://full.pem;
  6.     ssl_certificate_key D://key.pem;
  7. }
复制代码
其中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




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋|千帆移动开放平台  

GMT+8, 2024-12-23 09:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表