来自Security.framework的SecPKCS12Import()在OS X 10.6上失败

Sed*_*ien 6 security macos cocoa

当我尝试使用SecPKCS12Import()Mac OS X 10.6提供的安全框架时errSecUnimplemented,无论提供什么参数,结果代码总是如此.

此外,连接器是无法找到相关的SecImportExport.h宣布此功能的常量符号(即kSecImportExportPassphrase,kSecImportItemIdentity等).

这个库正在发生什么 - 是实现的功能还是不实现?为什么链接器可以解析框架中的所有其他符号,但不能解决这些问题?我应该如何将PKCS12格式的二进制blob转换为SecIdentityRef或SecCertificateRef和SecKeyRef对?

我究竟做错了什么?我确定这是一个PEBKAC问题.:-)


编辑:我看到我的问题非常清楚.我知道Security.framework已经实现,因为我能够使用它提供的其他功能而不会出现问题.鉴于此,我相当肯定我正在正确链接框架,因为如果删除链接,则无法找到符号 - 正如预期的那样.当我重新链接的框架,所有的符号被发现,有关的常数的例外SecPKCS12Import(),例如kSecImportExportPassphrase,kSecImportItemIdentity等等.

鉴于我不能使用这些符号,我传入了可能是不正确的字符串(@"kSecImportItemIdentity"等),但返回的错误代码是errSecUnimplemented.这让我相信也许这个特定的功能还没有实现.

我尝试使用10.5 SDK,但当然没有用.:-)


编辑:我的导入只是一个常规#import <Security/Security.h>.对于踢球,我也尝试#import <Security/SecImportExport.h>过,但这并没有改变.也就是说,错误是由链接器而不是编译器发出的.

我跑去dyldinfo -export Security.framework/Security列出图书馆导出的符号,发现了很多新的符号,但kSecImportExportPassphrase朋友们显然都缺失了.这可能解释了链接器无法找到符号的原因.符号SecPKCS12Import表示出现在符号表中,我可以毫无问题地调用它,它只是功能似乎不存在.

Qui*_*lor 3

Security.framework 肯定已实现 \xe2\x80\x94 请参阅安全参考更新,其中记录了 10.6 及之前框架中的更改。由于您知道要使用的标头,我假设您已经查阅了安全框架参考

\n\n

您确定正确导入并链接到框架吗?(它位于 中/System/Library/Security.framework,因此您不必指定路径。)

\n\n

编译器是否发出警告或错误,指出 SecImportExport.h 中的符号未定义?(如果没有,你怎么知道它们是“已声明但未定义”?)

\n\n

当您说这在 10.6 上失败时,您是否在早期版本的操作系统上尝试过成功?

\n\n
\n\n

编辑:好的,由于您正在成功使用 Security.framework 的其他部分,并且您尝试使用的 API 和常量仅为 10.6,因此它似乎不是链接问题。您的导入是什么样子的?您确定导入SecImportExport.h正确吗?这些常量是在函数上方声明的SecPKCS12Import(),因此如果您收到有关常量的警告,您也应该收到有关该函数未定义的警告。

\n\n
\n\n

编辑:我已与负责 Security.framework 的 Apple 团队成员确认,此功能目前尚未实现。请在http://bugreport.apple.com上针对组件Security (New Bugs)、版本提交错误以对此进行投诉X。在您的报告中包含此问题的 URL。抱歉,目前没有更好的答案。

\n