问题标签 [keychain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 在没有 Keychain 的情况下将 codesign 添加到私钥 ACL
我正在尝试为稳定的 iPhone 应用程序设置持续构建/集成。
我有:
- 专用的 Mac Mini。
- 一个名为“build”的用户帐户
- Hudson通过在 /Users/build/Library/LaunchAgents 中放置一个 plist 设置为构建的 LaunchAgent
- 尝试作为以 hudson 身份运行的系统范围的 LaunchDaemon,但随后无法访问构建用户的登录钥匙串。长篇大论,满满的心酸。
- 系统设置为在启动时自动登录“build”,以便 Hudson 开始运行。
最大的问题是代码设计和钥匙串。
我们代表客户的开发人员身份创建代码,因此我们有多个开发人员身份,我们将添加更多。
我想把 Mini 放在一个很黑的房间里,从不看它,但是当你第一次使用开发人员身份构建时,会弹出一个 GUI 对话框,询问你是否要始终允许 codesign 访问开发人员身份。
假设您这样做,该对话框会修改钥匙串访问控制列表 (ACL),以便允许进行协同设计。
您可以通过打开钥匙串访问、展开证书、选择私钥、右键单击、选择获取信息,然后切换到访问控制选项卡来查看此信息。“原始”密钥将仅在其“始终允许”应用程序列表中具有钥匙串访问权限。您在对话框中使用并确认的一个也将具有共同设计。
这个框提供了一种添加应用程序的方法,除了你得到标准的 Finder 文件选择器,它隐藏了 Unix 文件夹。无法导航到 /usr/bin/codedesign。所以手动添加是不可能的!
有谁知道解决这个问题的方法?
我知道使用“安全导入”的 -T 开关的一种方法,但是首先在导入密钥时必须指定 ACL,因此必须丢弃并重新导入 Keychain GUI 中添加的任何密钥。不是很好。
cocoa - 在一个 CFReadStream 中设置 kCFStreamSSLValidatesCertificateChain 会导致其他 CFReadStreams 不验证证书链
在下面的 iOS UIViewController 代码中,我连接到使用自签名证书的服务器。我可以通过两种方式验证这个自签名证书:手动使用信任 API,或者通过将自签名证书自动添加到我的应用程序的钥匙串中。
不幸的是,在我创建 CFReadStream 并将 kCFStreamSSLValidatesCertificateChain 设置为 kBooleanFalse 之后,我之后创建的每个 CFReadStream 都不会验证其证书链。我是否未能在某处清理代码?如果是这样,我很乐意将这个问题重新表述为有关 API 清理的特定内容。
iphone - 无法将 distribution_identity.cer 导入钥匙串访问
我一遍又一遍地遇到同样的问题。我正在为 iphone 开发一个应用程序,并且已经将我的 developer.cer 导入到钥匙串访问中,它出现在我的一个钥匙的钥匙串访问中。但后来我制作了一个分发配置文件并将其导入 xcode。它有一个错误(详见图片)。所以我去苹果配置门户并找到我的分发证书。我下载它并转到钥匙串访问并单击文件>导入项目...我从我的下载文件夹中单击我的 distribution_identity.cer 并没有任何反应。没有错误没有什么。但是当我查看“证书”选项卡时,我看到了我的分发证书。但它不像另一个键。请帮忙!!!! xCODE 中的错误。
iphone - 使用苹果 KeyChainItemWrapper 写入 iPhone 钥匙串
我使用 Apple 的 KeyChainItemWrapper 类写入 iPhone 钥匙链。在第一次出现时,我能够使用标识符写入钥匙链。检索也很完美。但是,我更改了此标识符,并且从第二次开始,iPhone 钥匙链将不允许我使用不同的标识符将任何值写入 kSecValueData。然而,在第一次它本身可以工作,但在那之后不能使用不同的标识符。这里可能是什么问题?
谢谢
ios - iOS钥匙串服务:只允许kSecAttrGeneric Key的特定值?
我正在尝试使用此 Apple 示例代码中提供的 KeychainWrapper 类:https ://developer.apple.com/library/content/samplecode/GenericKeychain/
在示例应用程序中,该类具有以下 init 方法:
在示例应用程序中,它使用两个值作为标识符字符串。“密码”和“帐号”。在我的代码中实现该类时,我使用了一些自定义标识符并且代码不起作用。对 SecItemAdd() 的调用失败。经过一些测试,似乎使用“密码”和“帐号”以外的值作为标识符不起作用。
有谁知道允许哪些值和/或是否可以为您的钥匙串项目设置自定义标识符?
android - 在 Android 上是否有与 iOS 的钥匙串等效的用户凭据?
Android 上是否有与 iOS 的 Keychain 等效的功能?
我对Preferences API的理解是它没有加密。对于我的应用程序,这些凭据是否跨设备持久存在并不重要(即与Android 中类似 iPhone 的钥匙串不同的用例?)
我还查看了KeyStore API,但它似乎将用户凭据的实际存储留给了应用程序开发人员。
objective-c - 禁用钥匙串权限对话框?
我想知道我是否可以禁用每当我的应用程序想要访问钥匙串数据时弹出的钥匙串对话框。我的应用程序将 TextField 的字符串与钥匙串条目进行比较,以检查输入的密码是否正确。
它工作正常,但它要求访问它的权限。
如何避免这种行为?
最好的问候,阿德里安
c# - 获取 Apple Keychain 以识别 Bouncy Castle .NET 创建的 PKCS12 (.p12) 存储
我们的组织为多个客户端管理稳定的 iOS 应用程序,这意味着要处理许多不同的开发人员身份证书和推送通知证书。
我使用Bouncy Castle C# Crypto API在简化推送通知的证书和私钥的管理方面取得了成功,基本上消除了我们所有推送通知证书的钥匙串的需要。
我想将此扩展到开发人员身份证书。目标是将所有私钥和证书信息存储在每个开发人员身份的数据库中。然后,当需要配置新的开发人员或构建机器时,服务器端代码可以将所有证书和私钥包装到一个 p12 存档中,并使用一个密码可以导入目标 Mac 的钥匙串。
不幸的是,Mac 钥匙串不喜欢我生成的 p12 文件。这很烦人,因为我可以成功地将这些文件导入 Windows 证书管理器。
我正在使用的代码(重要部分)如下所示:
就像我说的那样,这非常适合在 Windows 上导入,但在导入 Mac 钥匙串时会失败并出现非常一般的错误。
在加载 Keychain 生成的 p12 和我自己生成的 p12 文件时,我可以看到一个主要区别,但我不知道这是否是原因。
如果我将 Mac Keychain 生成的 p12 加载到 Bouncy Castle PKCS12Store 中,然后检查密钥,在 Keychain p12 上,证书和私钥都具有密钥“1.2.840.113549.1.9.21”具有等效值的属性(一个 DerOctetString,值为 #af8a1d6891efeb32756c12b7bdd96b5ec673e11e)。
如果我对生成的 p12 文件执行相同操作,则私钥包含“1.2.840.113549.1.9.21”属性,但证书不包含。
如果我谷歌 "1.2.840.113549.1.9.21",我发现这个 OID 表示 PKCS_12_LOCAL_KEY_ID。我唯一的理论是钥匙串依靠它来匹配证书和私钥,而我生成的文件没有这个,所以它失败了。
但是,我尝试将这些值添加到哈希表,然后使用带有属性哈希表的 CertificateEntry 构造函数。如果我这样做,然后保存字节,然后重新加载字节,则该属性再次丢失。
所以我很困惑。也许这个属性是 Bouncy Castle API 中的一个小故障?也许我做错了什么。也许钥匙串对传入的 p12 文件有荒谬的非标准要求。无论如何,我们将不胜感激任何可以提供的帮助。
iphone - 一个 Xcode 管理器中的多个证书/配置文件?
这里有几个类似的问题,但没有一个可以回答我的基本问题:
是否可以在钥匙串中有两个单独的开发人员证书,在 Organizer 中有两个相应的分发配置文件?
我有自己的(工作)开发人员证书和我自己的 iPhone 应用程序的配置文件。现在我为客户完成了一个项目,并想使用他的开发者帐户/证书/配置文件将他的应用程序提交到他帐户上的应用商店。
这甚至可能吗?
到目前为止,我下载并安装了他的证书,它们出现在我的钥匙串中,我在 Organizer 中安装了他的配置文件,但 Organizer 告诉我“在你的钥匙串中找不到与此配置文件匹配的有效签名身份。”。同样,归档构建失败。
我找不到方法告诉主办方使用我客户的证书而不是我自己的证书——我认为这是问题所在。
谢谢你的帮助!
iphone - 在应用程序钥匙串中存储应用内购买收据
我以前从未实现过 In App Purchase,所以我使用了 MKStoreKit 包装器并有一个有效的实现。MKStoreKit 将 UserDefaults .plist 中的所有收据保存为 BOOL,因此盗版者可以非常简单地以“破解”状态分发应用内购买。首次购买后,可以分发捆绑包并重新创建 .plist 以启用 IAP 解锁。
我想扩展 MKStoreKit 以在 iOS 钥匙串中创建 In App Purchase 验证数据。是否有任何缺点或可能的原因导致付费用户失败、不可靠或任何其他原因导致这样做总体上是个坏主意?我知道盗版是不可避免的,我绝对不想疏远付费用户,但我觉得 UserDefaults .plist 太容易绕过了。
在我的场景中,购买时会在钥匙串中放入一个简单的字符串。这样,如果二进制文件被分发,则尚未启用可解锁项。当然,有可能想出一个解决方法,但需要更多的努力并知道如何找到 TRUE/FALSE 标志并使其始终返回正确的值。通过混淆,我什至可以使追踪它变得更加困难。
感谢您的所有见解,我很欣赏避免强制性不可避免的盗版,处理它的答复的答案。我对这个解决方案的技术可行性更感兴趣。