Sierraでのセキュリティ / コードサイン: Keychainがアクセスコントロールの設定を無視し、UI-promptでアクセス許可を得る
質問
macOS Sierra から、usr/bin/security でキーチェーンに codesign-identity をインポートすることができなくなりました。これは、ビルドサーバのパッケージングスクリプトを破壊します。回避策はなさそうです。これは、カスタム作成されたキーチェーンだけでなく、login.keychainにも影響します。
再現のための手順 ターミナルで次のコマンドを実行します (インポートするために署名 ID が必要です)。
security create-keychain -p test buildagent.keychain
security unlock-keychain -p test buildagent.keychain
security list-keychains -d user -s buildagent.keychain
security default-keychain -s buildagent.keychain
security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign
codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'
結果: macOS は、以前にインポートした秘密鍵にアクセスする許可を求める UI プロンプトを表示します。
多くの回避策を試しましたが、何もうまくいかないようです。
- keychain-name を指定する際に新しい拡張子 .keychain-db を使用する。
- カスタムキーホルダーではなく、login.keychain を使用する。
- p12 を -A ('Allow any application to access the key') でインポートする。 インポートされたキーにアクセスすることを許可する)
- 証明書と鍵を別々にインポートする (事前に openssl pkcs12 で p12 から抽出されている) を別々にインポートする (openssl pkcs12 で事前に p12 から抽出)
ID のインポートは間違いなく機能し、Keychain Access アプリケーションでキーチェーンの内容を表示すると、証明書と鍵が表示されます。秘密鍵のアクセス制御設定も正しく構成されています (望ましい CodeSign 例外ルールが設定されています)。
Sierra からの UI プロンプトを回避するにはどうしたらよいでしょうか。
どのように解決するのですか?
使用するコマンドは以下の通りです。
security set-key-partition-list -S apple-tool:,apple: -s -k keychainPass keychainName
このコマンドラインツールは、list-keychainsの変更方法と同じように動作することを念頭に置いてください。 set-key-partition-list を単一の値で実行すると、証明書内のすべての partitionID を上書きします。渡された値を検証することはありません。
このコマンドが行うことは、特定のキーチェーンに署名 (-s) できる鍵の PartitionID (カンマで区切られた -S の後の項目) を設定することです。
コード署名を可能にする実際のPartitionIDは
apple:
.
私は何のために
apple-tool:
が何をしているのかわかりませんが、キーをインポートした後に
security import
でインポートした後にも存在していたので、コマンドをコピーペーストした人が壊れないようにするために残しています。
この変更は Mac OS Sierra で導入されましたが、文書化されていません (少なくとも、私は文書を見つけられませんでした)。10 月 16 日現在、セキュリティのマニュアル ページには、まだこのコマンドが記載されていません。
より詳細な情報については、このバグ レポートを参照してください。 http://www.openradar.me/28524119
関連
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] 「GCC使用時に「Xcode/iOSのライセンスに同意するには管理者権限が必要です。rootでsudoを使用して再実行してください。
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] iOS 11、Apple TV 4Kなどを搭載したXcode 9でワイヤレスデバッグを行う方法とは?
-
[解決済み] swiftで電子メールアドレスを検証する方法は?
-
[解決済み] OSXアプリにcodesignで署名しようとすると、"User interaction is not allowed "と表示される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] Xcode 7のエラーです。"Missing iOS Distribution signing identity for ..." (iOS配布用署名IDがありません)
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする