原始和升级iOS应用程序具有相同的钥匙串和应用程序标识,但升级应用程序无法解密由原始应用程序加密的密码

时间:2013-12-17 06:16:34

标签: ios keychain

我们在App Store中有一个版本的应用程序版本1.2.0,其权利看起来像这样(名称已更改,以保护无辜者)。此信息来自iTunes Connect应用程序详细信息(应用程序>查看详细信息>二进制详细信息)。

Bundle Identifier : com.ourco.xxx-app
[...]
Bundle Short Version String : 1.2.0
Bundle Version : 1.2.0.66338
[...]
Entitlements : Faspex.app/Faspex 
    get-task-allow: false 
    keychain-access-groups: ( 8xxxxxxxxE.com.ourco.xxx-app ) 
    application-identifier: 8xxxxxxxxE.com.ourco.xxx-app

我们有一个版本2.0.0的Release版本,它是从Xcode构建的,并使用我们的分发配置文件签名,其权利看起来像这样(通过将.ipa更改为.zip,解压缩它和针对解压缩应用程序运行的代码签名)。 / p>

$ codesign --display --entitlements - Payload/Xxx.app
[...]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>8xxxxxxxxE.com.asperasoft.xxx-app</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>8xxxxxxxxE.com.asperasoft.xxx-app</string>
    </array>
</dict>
</plist>

当我们从App Store版本进行升级测试到新版本时,我们无法从钥匙串中检索以前存储的密码(由1.2.0版本存储)。

通过“升级测试”我的意思是我们从App Store本身安装App Store版本,创建一个应用程序帐户并将该帐户的密码保存在钥匙串中,然后使用Xcode Organizer安装2.0版本的发布版本超过App Store(1.2.0)版本。当我们尝试使用“已升级”的2.0.0版本从钥匙串访问密码时,我们无法访问密码。

自我们升级此应用程序以来已经有一段时间了,但是上次我们这样做了,我不记得在升级测试期间遇到过这样的问题。

我的一些团队认为,当用户从App Store安装真正的2.0.0升级时,这将会神奇地修复自己,但我持怀疑态度。

如果需要,我会在此问题中添加任何必要的详细信息,以帮助您获得可靠的答案。提前谢谢!

1 个答案:

答案 0 :(得分:0)

原来这是代码中引入的逻辑错误,我们没有使用存储在钥匙串中的密钥(正如我所想),而是使用了不同的密钥。由于密钥链中的密钥用于加密密码,但密钥链中没有用于解密密码的密钥,我们永远不会得到密码匹配。

我们更改了错误的逻辑,以便我们转到加密/解密密钥的密钥链,现在可以在升级后解密密码。