問題タブ [security-framework]
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.
ios - iOS キーチェーン: kSecAttrAccessible の更新時に SecItemUpdate が -50 (paramErr) を返す
キーチェーン エントリの kSecAttrAccessible を更新する必要があります。アクセシビリティ属性だけで、実際のデータを更新する必要はありません。
まず、クエリ辞書が適切であることを確認するために、アイテムを見つけようとします。
この行により、探しているアイテムが見つかりました (リターン コードは 0)。
次に、同じクエリを使用して kSecAttrAccessible 属性を更新します。
この時点で、updateItemStatus は -50 (paramErr) です。
私はこのスレッドを見てきました:キーチェーン項目の kSecAttrAccessible 値を更新することは可能ですか?
しかし、私の問題は異なります。kSecValueData を my に追加しても -50 が返されますupdatedAttributes
。さらに、ドキュメントには、iOS 4 以前の場合にのみ kSecValueData を追加する必要があることも記載されています。私は iOS 7 以降をサポートしているので、これは私の問題ではありません。
ここで私が見逃していることを誰かが指摘できますか? どうもありがとう。
ios - OS X にサインオンし、iOS と OSStatus で確認 -9809
Apple のSecurity Frameworkを使用しています。OS X ではすべて署名して正常に検証できSecKeyRawVerify
ますが、iOS で使用しようとすると -9809 エラーで失敗します。
さまざまな PKCS パディング オプションやその他の多くの属性を試してみましたが、これを正しく検証することができません。
以下のコードには、最初にこれを適切に機能させようとしているだけで、いたるところにリークがある可能性があることに注意してください。
OS X 署名コード:
および iOS 検証コード:
次の OpenSSL コマンドを使用して、コマンド ラインから秘密鍵と公開鍵を作成しました。
どんな助けでも大歓迎です。
ios - Swift の SecAccessControlCreateWithFlags()
Swift コードから Security.framework の関数を呼び出そうとしています。次のように関数を呼び出すと、「エラー出力」(最後の)パラメーターを一瞬忘れてしまいます。
次のエラーが表示されます。
タイプ '(CFAllocator!, CFStringRef, SecAccessControlCreateFlags, nil)' の引数リストを受け入れるタイプ 'SecAccessControlCreateFlags' の初期化子が見つかりません
...ただし、コードを次のように再フォーマットすると:
(特定の型- 例CFAllocatorRef
- Xcode のオートコンプリートの関数プロトタイプから取得)... 問題なくコンパイルされます。どうしたの?
次に、エラー パラメータ. 何を渡す必要がありますか?私のObjective-Cコードを移行すると、次の変数を渡したくなります(&
もちろん、先頭に が付きます):
...エラーが発生します:
タイプ '(CFAllocatorRef!, AnyObject!, SecAccessControlCreateFlags, inout CFErrorRef!)' の引数リストで 'SecAccessControlCreateWithFlags' を呼び出すことはできません
代わりに、次の変数を渡します (ここでも、address-of 演算子を先頭に追加します)。
(プロトタイプのオートコンプリートで提案されているものと同じタイプ)、次のようになります。
タイプ '(CFAllocatorRef!, AnyObject!, SecAccessControlCreateFlags, inout UnsafeMutablePointer?>)' の引数リストで 'SecAccessControlCreateWithFlags' を呼び出すことはできません
...だから、何が得られますか?
EDIT:エラーパラメータを忘れてください。アドレスを 2 回取得しているようです (つまり、ポインターへのポインター)。代わりに、これを行う必要があります。
出典:この回答内のサンプル コード。
ios - IOS セキュリティ フレームワーク p12 と有効期限
p12 データから有効期限を抽出しようとしています。Apple のドキュメントを最初から最後まで読みましたが、その方法を見つけることができませんでした - https://developer.apple.com/library/prerelease/mac/documentation/Security/Conceptual/CertKeyTrustProgGuide/CertKeyTrustProgGuide.pdf
私のコードはpdfのように、秘密鍵p12データを含むNSDataを使用してSecKeyRefをロードしており、サーバーで暗号化されたデータを復号化できます。
問題は、p12 の有効期限が切れたときに復号化が行われないようにしようとしていますが、キーの有効期限が切れていることを検出できません。
Javaでは、解決策は非常に簡単でした
iOSで同じことをする方法を知っている人はいますか?
編集: Apple フォーラムの質問も添付して ください https://forums.developer.apple.com/message/53696#53696 ありがとう
swift - SecTransformExecute() が EXEC_BAD_ACCESS でアプリをクラッシュさせる
秘密鍵と公開鍵のペアがあり、そのいずれかで文字列を暗号化しようとしています。コードはOSX 10.11およびXcode 7.2で実行されています
上記は惨めに失敗しており、実行時にアプリがEXEC_BAD_ACCESS
. エラーはありません。
kSecPaddingPKCS1Key
私の調査によると、パディングをデフォルトで PKCS1 に設定する NULL ではなく、明示的に指定することに関連するバグがある可能性があります。ただし、Swift がそれを nil に置き換えたため、この値を NULL に設定できませんでした。この値はこの場所では使用できません。
objective-c - OS X で DER 証明書を作成する
質問はかなり簡単です。SecurityFramework API を使用するだけで、osx で x509 証明書を作成する方法を教えてください。SecKeyGeneratePair で生成した publicKey を使用して証明書を作成したいと考えています。
これまでのドキュメントでメソッドSecCertificateCreateWithDataしか見つけられませんでしたが、これにはすでにパラメーターとしてx509証明書が必要なので、これは私にとってはうまくいきません。証明書を最初から作成できる方法が見つかりませんでした。また、私はこのトピックについてあまり経験がないので、ここで何かが欠けている可能性が非常に高い. どんな助けでも大歓迎です。
また、私のプロジェクトでは、openSSL または非推奨の API を使用することはできません。
私はすでにこの質問に出くわしました セキュリティ フレームワークを使用して Objective-C でプログラムによって x509 証明書を作成します、しかしこれは1年前なので、おそらく今それを行う可能性があるのではないかと思いました.
macos - Mac Launch Daemon がパスワードをシステム キーチェーンに保存した後、そこからパスワードを取得できない
(必然的に、さまざまな理由から) root として実行され、ネットワーク経由でサーバー コンポーネントと通信する Launch Daemon があります。サービスで認証する必要があるため、最初にパスワードを取得するときに、それをシステム キーチェーンに保存します。その後の起動では、キーチェーンからパスワードを取得し、それを使用してネットワーク サービスで認証するという考え方です。
これは問題なく機能していましたが、macOS 10.12 では既存のコードが機能しなくなり、これを修正する方法に完全に困惑しました。要約すると、次のようになります。
新しいパスワードを保存するか古いパスワードを取得するかに関係なく、これを使用してシステム キーチェーンへの参照を取得します。
また、デーモンのコンテキストでは既にオフになっていると予想されますが、適切な手段としてユーザーの操作を無効にします。
新しいパスワードをキーチェーンに保存するときは、
これだけ効きます。成功が報告され、Keychain Access.app の「システム」キーチェーンに項目が表示されます。
デーモンの後続の実行でそれを取得するには、次の行を使用します。
残念ながら、これはerrSecAuthFailed
私たちには不明な理由で再発し始めています.
私たちがチェックしたいくつかの追加の詳細と試してみましたが、役に立ちませんでした:
- デーモン バイナリは、開発者 ID 証明書で署名されています。
- デーモン バイナリには、バンドル ID とバージョンを含む Info.plist セクションが埋め込まれています。
- Keychain Access.app のパスワード項目の [アクセス制御] タブにある [これらのアプリケーションによるアクセスを常に許可する] リストにデーモン バイナリが表示されます。
- キーチェーンアクセスで「すべてのアプリケーションがこのアイテムにアクセスできるようにする」に手動で切り替えると、機能します。ただし、これは、パスワードをキーチェーンに保存するという点をやや無効にします。
- パラメータを に変更してみ
SecKeychainAddInternetPassword
ましたが、違いはないようです。 - でキーチェーンを明示的にロック解除しようとしまし
SecKeychainUnlock()
たが、ドキュメントが示唆するように、これは不必要なようです。 - ご想像のとおり、アイテムを削除すると yieldが
Keychain Access.app
発生します。したがって、保存されたアイテムを確実に見つけることができますが、それを読み取ることは許可されていません。SecKeychainFindInternetPassword()
errSecItemNotFound
キーチェーンのドキュメントは正確に読むのは簡単ではなく、部分的にはトートロジー的です。(「Y を行うには、Y を行う必要があります」と、Y を実行する理由については言及しません。) それでも、私はそれをやり遂げ、そのほとんどを理解したと思います。特定のセットアップのさまざまな側面 (デーモンからのアクセス) については詳しく説明していませんが、同じアプリによって以前に保存されたアイテムへのアクセスには、特別な承認や認証が必要ないことは明らかです。これは、私たちが見ている動作とは正反対です。
何か案は?