1. ホーム
  2. ios

Sierraでのセキュリティ / コードサイン: Keychainがアクセスコントロールの設定を無視し、UI-promptでアクセス許可を得る

2023-08-11 19:44:43

質問

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