在各大领域对Https的大力推进,苹果公司对app上架审核要求采用Https的规定的契机下,App需启用Https安全链接模式。
我方提供了两个主流解决方案。分别是自签名SSL证书和第三方信任机构颁发SSL证书。
方案一:自签名SSL证书
自签名SSL证书方案操作相对很复杂,需要配置服务端源码和大幅度修改app端源码。同时在PC网站端会有红色的非认证机构颁发证书的警告。因此该方案我们不推荐。具体处理方式见附件。
方案二:第三方信任机构颁发SSL证书。
SSL证书根据验证级别,分为三种类型,即域名型SSL证书,简称DVSSL;企业型SSL证书,简称OVSSL;增强型SSL证书,简称EVSSL。详细区别见附件 SSL证书类型简介.doc
对于小型企业我们建议申请免费的DVSSL证书,中大型企业申请付费版本的OVSSL或者EVSSL,酌情而定。
一、准备工作:
免费的DVSSL证书有国内很多平台,推荐腾讯云中的合作的“亚洲诚信”免费DVSSL证书。付费的SSL也可以在腾讯云中申请。具体申请流程见腾讯云中提供的教程。
腾讯云申请地址 https://www.qcloud.com/product/ssl
亚洲诚信 https://www.trustasia.com/
二、后台工作:
TS4.3以及之前的版本:
修改core/core.php tsdefine('IS_HTTPS', 0); 改为 tsdefine('IS_HTTPS', 1);
TS4.5 版本:
修改src/vender/zhiyicx/src/core.php tsdefine('IS_HTTPS', 0); 改为 tsdefine('IS_HTTPS',1);
在nginx 配置中的对应的server段加入如下代码即可
listen 80 default backlog=2048;
listen 443 ssl;
ssl_crttificate xxx/xxx.crt;//证书相对路径
ssl_crttificate_key xxx/xxx.key;//证书相对路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers"ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";//推荐的向后兼容的密码套件
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
三、app端工作:
A、iOS端
1、关闭-Info.plist文件内, AppTransport Security Settings 子键中Allow Arbitrary Loads 设置为 YES ,开启ATS校验。同时添加 AllowArbitrary Loads in Web Content 子键并设置为NO,允许H5访问Http站点。
在app提交审核中追加以下文案:
由于该app中有通过H5访问部分外部站点的应用场景,不能确保外部站点使用了Https,因此申请允许H5访问Http的站点权限。
注意:
由于web开通Http访问权限是在iOS10才新增的,所以该设置会导致iOS10以下版本的手机无法在H5中访问http链接的内容。建议运营团队控制H5中的链接指向,尽量避免链接到Http网页。待官方推出完美的解决方案。
2、修改服务器域名为Https即可
以及之前的版本:
修改 Api.h文件中
#define HEADURL @"http://demo.thinksns.com/ts4/"
为
#define HEADURL @"https://demo.thinksns.com/ts4/"
TS4.5 版本:
修改TSNetworkingRequestPath.h 中
static NSString const@"http://demo.thinksns.com/ts4/";
为
static NSString const@"http://demo.thinksns.com/ts4/";
3、第三方Https的支持
3.1 不用处理的第三方:极光推送、bugHD、友盟、shareSDK、
3.2 需要升级的第三方:高德地图
官网链接:http://lbs.amap.com/api/ios-sdk/guide/create-project/https-guide/
'AMap2DMap', '~> 4.5.0' // 及其以上
'AMapSearch', '~> 4.4.1' // 及其以上
【备注】
1.可以直接通过CocoaPods升级版本。
或者官网下载对应文件(2D地图和搜索功能)后替换/Pods/AMap2DMap/MAMapKit.framework
以及/Pods/AMapSearch/AMapSearchKit.framework
2.添加代码
AppDelegate.m
#pragma mark --- 初始化 三方平台
-(void)init3Part{
[OpenShareconnectAlipay];
[OpenShareconnectWeixinWithAppId:WeiXinSDK_AppId];
// 开启高德地图Https兼容
[[AMapServicessharedServices] setEnableHTTPS:YES];
[AMapServicessharedServices].apiKey = AMAP_KEY;
}
B、安卓端
1、修改\thinksns-system-android\ThinkSnsBase\src\main\java\com\thinksns\sociax\thinksnsbase\network\ApiHttpClient.java中的newHttpClient()方法中 API-URL= “http://” + HOST +”/”+API 的http:// 更改为‘https://’。
2、替换\thinksns-system-android\Thinksns_v4.0\src\com\thinksns\sociax\api\Api.java中所有的 http为https。
3、替换\thinksns-system-android\Thinksns_v4.0\src\com\thinksns\sociax\t4\android\function\FunctionThirdPlatForm.java中的http为https。
注:2017 年1月6日以后的版本只用更改\thinksns-system-android\ThinkSnsBase\src\main\res\values\app_init_set.xml中的名叫protocol的arrayitem。如图: