2009-11-23 10 views
6

SecPKCS12Import()をMac OS X 10.6のセキュリティフレームワークから使用しようとすると、提供される引数に関係なく、結果コードは常にerrSecUnimplementedになります。Security.frameworkのSecPKCS12Import()がOS X 10.6で失敗する

さらに、リンカーは、SecImportExport.hで宣言されたこの関数に関連する定数(つまり、kSecImportExportPassphrasekSecImportItemIdentityなど)のシンボルを見つけることができません。

このライブラリでは何が起こっているのですか?機能は実装されているのですか、そうではありませんか?なぜリンカはフレームワーク内の他のすべてのシンボルを解決できますか? PKCS12形式のバイナリBLOBをSecIdentityRefまたはSecCertificateRefとSecKeyRefのペアに変換する方法はありますか。

私は間違っていますか?私はこれがPEBKACの問題だと確信しています。 :-)


編集:私は私の質問で非常に不明であったことがわかります。私はそれが問題なく提供する他の機能を使用できることを考えれば、Security.frameworkが実装されていることを認識しています。これを考えると、フレームワークと正しくリンクしていることは確かです。なぜなら、リンクを削除すると、期待どおりにシンボルが見つからないからです。フレームワークを再リンクすると、すべてのシンボルが見つかります。ただし、SecPKCS12Import()に関連する定数は例外です。 kSecImportExportPassphrasekSecImportItemIdentityが、私はこれらの記号を使用できないことを考えるなど

は、私がされている可能性が何を間違った文字列(@"kSecImportItemIdentity"など)に渡されたが、エラーコードが返さerrSecUnimplementedました。これは、おそらくこの特定の機能が実装されていないと私に信じさせました。

私は10.5 SDKを使ってみましたが、それはうまくいきませんでした。 :-)


EDIT:私のインポートはちょうど普通の#import <Security/Security.h>です。キックの場合は、#import <Security/SecImportExport.h>も試しましたが、これは変更されませんでした。つまり、エラーはコンパイラではなくリンカによって発行されます。

newシンボルの多くが見つかりましたが、友人が目立っていなくて、ライブラリでエクスポートされたシンボルを一覧表示するためにdyldinfo -export Security.framework/Securityを実行しました。これはリンカがシンボルを見つけることができない理由を説明するかもしれません。 SecPKCS12Importのシンボルがシンボルテーブルに表示されますが、問題なく呼び出しても問題ありません。機能がないようです。

+0

実装されていないことが確認されました。少なくとも10.6.2までです。これについては、レーダーを提出してください。私の答えは以下のとおりです。 –

答えて

3

Security.frameworkは最も確かに実装されています。Security Reference Updateを参照してください。これは10.6以前のフレームワークで何が変更されたかを示しています。あなたが使用するヘッダーを知っているので、私はあなたがすでにSecurity Framework Referenceに相談したと仮定します。

正しくフレームワークにインポートしてリンクしていますか?

SecImportExport.hのシンボルが定義されていないことを示す警告またはエラーがコンパイラによって出力されますか。 (そうでない場合は、「宣言されているが未定義」であることをどのようにして知っていますか?)

10.6で失敗すると、以前のバージョンのOSで正常に試しましたか?


EDIT:あなたが成功しSecurity.frameworkの他の部分を使用している、とあなたが使用しようとしているAPIおよび定数は唯一の10.6ているのでわかりました、それはリンクの問題のように見えるしていません。 。あなたの輸入品はどのように見えますか? SecImportExport.hを正しくインポートしていますか?定数はSecPKCS12Import()関数のすぐ上に宣言されています。したがって、定数の警告が表示された場合は、その関数も未定義になるはずです。


EDIT:私は、この機能は現在実装されていないことSecurity.framework上で動作しますアップルのチームのメンバーと確認しています。これについて詳しくは、http://bugreport.apple.comのコンポーネントSecurity (New Bugs)、バージョンXに対してバグを報告してください。この質問のURLをレポートに含めます。申し訳ありませんが、現時点ではより良い答えはありません。

+0

私の無能さのために、私はこの答えに自分の答えを答えました。 –

+0

私はそれ以来、質問を改訂しました。うまくいけば、これは役に立ちます。 :-) –

+0

あなたの最新のアップデートは非常に役に立ちます。特にリンカエラーです。いくつかのシンボルがエクスポートされていないという事実は困惑しています。私は決定的な答えを見つけることができるかどうかを確認するために深く掘り下げていきます... –

1

私の知る限り、アップルは物事を部分的に実装したり、ドキュメントを残しておらず、素晴らしいです。実際に必要な実装が見つからない場合は、OpenSSLを使用してBLOBを抽出し、Securityサービスを使用してKeychainにインポートするか、Security/CDSAメソッドを使用して処理します。そうすれば、あなたは可能性があるなら、あなたはさらなる質問をしてAppleのdev接続をpingすることができます。

はさらに、私の10.6.2のマシン上で/System/Library/Frameworks/Security.framework/Headers/SecImportExport.hを見て、私はSecKeychainItemImport()

検索のドキュメントでPKCS#12への参照を参照してください詳細については、「PKCS12」のファイルを参照してください。

関連する問題