搭建 超级签 详细攻略

超级签网上的讲解已经有很多很多了,但是都不够细致, 对于我这种没接触过苹果开发的人来说, 还是有点蛋疼。 这也是这篇博客的目的,希望帮助到更多人。
开头先说下超级签, 也不知道谁起的这么有创意的名字。 简单来说就是用过苹果的个人开发者帐号对用户设备进行针对性打包,然后提供用户下载。PS: 这过程是由系统自动完成。

这个是签名的流程图:
搭建 超级签 详细攻略_第1张图片

这个就涉及到几个问题
  1. 对 mobileconfig 文件进行签名, 提供给用户下载
  2. 需要获取用户的设备号 也就是 uuid
  3. 需要把获取到的用户的 uuid 添加到苹果的开发者后台里面。 这个就涉及到跟苹果的通信
  4. 从苹果的开发者后台下载 mobileprovision 文件。 这个也是需要跟苹果通信的。PS: 要把包名添加到开发者后台, 否者会签名失败
  5. 使用linux系统对ipa文件进行签名, 然后提供给用户下载

解决方案:

问题1:
为iOS的mobileconfig文件进行签名 这篇描述的比较详细, 但里面的方法好像不太能用了。反正我没测试通过, 这是一个坑之一。
解决方案是:阿里云免费SSL证书对IOS描述文件mobileconfig的签名认证 该方案可以正常使用。里面提及的证书, 阿里云已经更新过了。
正确的应该使用: 此处划重点

  1. apache证书的 xxx.net_public.crt 直接使用不需要按照文中转换
  2. nginx的 xxx.key 和 xxx.pem
    划重点:mobileconfig 必须是https,必须是301跳转,且nginx或其他web服务器 必须支持TSL1.2以上 坑之二…不想重新编译请使直接使用负载均衡完美解决这个问题
    openssl s_client -connect 域名:443 -tls1_2 该命令可测试你的域名能否支持tsl1.2

问题2:
通过Safari浏览器获取iOS设备UDID(设备唯一标识符) 的博客写的又详细又好, 我就不多此一举了


问题3和4:
在github上有开源工具 Spaceship,感谢开源贡献者, 感谢你们。。但顺便吐槽一下, ruby写的…文档看着头疼
Spaceship 文档
ruby api文档
ruby 初学者


问题5:
又是一枚开源工具 isign, 简单到一行代码搞定签名, 这个是python写的,必须2.+的环境, 不要用3.0以上的 我使用的是2.7的。对此我也想吐槽一句,网上介绍超级签必定介绍这个工具, 但为什么没有人说一下这个工具可以在linux上跑。。为此我一直傻傻的认为只能在mac上运行

isign -c 客户端证书.pem -k 私钥.pem -p 苹果授权文件.mobileprovision -o 目标.ipa 源.ipa

介绍到此结束。可以自己搭建一套企业签了, 当然还需要做一些兼容。下面是一些详细的搭建过程, 没有兴趣的可以略过。。。





环境安装

服务器系统版本 centos 7.2

wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.4.tar.gz
tar -zxvf ruby-2.6.4.tar.gz
cd ruby-2.6.4
./configure --prefix=/usr/local/ruby-2.6.4
make && make install

ln -s /usr/local/ruby-2.6.4/bin/ruby /usr/bin/ruby
ln -s /usr/local/ruby-2.6.4/bin/gem /usr/bin/gem

gem install fastlane
gem install pry
gem install spaceship
gem install pry-coolline
gem install rails
gem install mysql2

yum install zip

python 2.7的环境, 不能是3.0的环境
# 不能使用这个安装, 这会安装老版本的 pyopenssl,
# 然后pip就失灵了, 如果试图修复pyopenssl, 
# 更新成为最新版本,他又提示 not found module, 所以不要去做这种尝试了, 坑之三
# 不要使用  pip install isign

#请使用
git clone https://github.com/apperian/isign
sh version.sh
python setup.py build
python setup.py install


在解决上面5个问题提之前。我们应该先部署一些东西
**我们要有一个苹果开发者帐号, 然后可以登录进去, 到创建一个ad_hoc的描述文件 并导出该证书的p12 文件, 并制作一个 mobileConfig 文件。至于如何制作, 请看 通过Safari浏览器获取iOS设备UDID(设备唯一标识符) **
问题1 签名mobileConfig:

 system "openssl smime -sign -in #{源mobileConfig} -out #{输出mobileConfig} -signer #{apache的net_public.crt} -inkey #{nginx的 xxx.key} -certfile #{nginx的 xxx.pem} -outform der -nodetach"

划重点: 我使用的 openssl 版本是1.0.2k,openssl 在1.0.1的时候开始支持TLS1.1,TLS1.2; 我并没有遇到协议不支持这方面的问题。。建议低于这个版本的同学,如果遇到一些问题可以尝试升级openssl

在强调一遍:下载mobileconfig 必须是https,必须是301跳转,且nginx或其他web服务器 必须支持TSL1.2以上

问题2:使用p12 导出 pem

	#登录帐号
    Spaceship::Portal.login(username, password)
    #导出 客户端.pem
    system "openssl pkcs12 -password pass: -in #{p12文件路径} -out #{客户端.pem路径} -clcerts -nokeys"
    #导出 私钥.pem
    system "openssl pkcs12  -password pass: -in #{p12文件路径} -out #{私钥.pem路径} -nocerts -nodes"

问题3和4:

	#登录帐号
    Spaceship::Portal.login(username, password)
    
 	#添加 bundleId
    app = Spaceship::Portal.app.find(bundleId)
    if !app
        app = Spaceship::Portal.app.create!(bundle_id: bundleId, name: bundleId)
    end

  #如果uuid不存在则添加uuid
    if !Spaceship::Portal.device.find_by_udid(uuid)
        Spaceship::Portal.device.create!(name:uuid, udid: uuid)
    end

  #创建 ad_hoc
  	profile = Spaceship::Portal.provisioning_profile.ad_hoc.create!(bundle_id: bundleId, certificate: cert, name: username)

	#获取所有设备号
	devices = Spaceship.device.all
	Spaceship.provisioning_profile.ad_hoc.all.each do |p|
	     # 根据cert 证书创建
	     #更新 ad_hoc
	     p.devices = devices
	     p.update!
	end
    Spaceship.provisioning_profile.ad_hoc.all.each do |p|
    	File.write(mobileprovision文件路径, p.download)
    end

	#目前测试这样写是不会出错的。如果两个循环放在一个里面。。苹果会报错, 坑之四
  1. 签名 ipa文件
# 注意: 描述文件 和 p12的keyPem,mobileProvision 
# 一定是要对应的,否则就算签好了, 也无法运行api 坑之五
 system "/usr/bin/isign   -c #{描述文件} -k #{p12的keyPem} -p #{p12的mobileProvision} -o #{输出api} #{源api}"
特别指出很多,签名过后不能使用的情况。 原因是第一步 创建证书的时候记错了。。手动创建证书的时候 需要上传p12文件,而脚本上所要求的p12文件必须是同一个!!!!
为了更好的理解打包过程和搭建自己的超级签平台, 提供一个流程图给大家参考

搭建 超级签 详细攻略_第2张图片
以上就是搭建超级签的核心代码。。
这里有一套现成的解决方案提供参考:[email protected]:liaoque/ipasign.git
如果有问题可以加QQ: 844596330

你可能感兴趣的:(linux软件安装)