Удалить закрытый ключ из цепочки для ключей Mac OS X с помощью терминала - PullRequest
25 голосов
/ 06 октября 2011

Я импортировал идентификатор разработчика (сертификат + закрытый ключ) для разработки под iOS в цепочку ключей, используя приложение терминала "security" с командой

security import identity.p12 -k <keychain> -P <passphrase>

Импортирует оба элемента, включенные в файл p12., сертификат и закрытый ключ, в данный брелок.Однако я забыл указать -T /usr/bin/codesign, который добавляет приложение с кодовым знаком в список доступа к закрытому ключу.Я пытался добавить приложение с кодом в список доступа, но безрезультатно:

  • Я пытался повторно импортировать идентификатор с добавленным параметром, но, похоже, это не меняет список доступа.закрытого ключа.
  • Я также попытался удалить сертификат из цепочки для ключей, используя security delete-certificate, и повторно импортировать.Это не меняет список доступа к закрытому ключу.

Поскольку у меня есть только ssh-доступ к компьютеру, использование приложения Keychain GUI не будет работать.Поэтому я ищу способ удалить закрытый ключ из цепочки для ключей (чтобы я мог повторно импортировать идентичность впоследствии).Я проверил справочную страницу инструмента security, но не нашел средства для удаления закрытого ключа.

Есть ли способ удалить закрытый ключ из цепочки для ключей только с помощью команд терминала (какУ меня есть только ssh доступ к рассматриваемой машине)?

Ответы [ 2 ]

33 голосов
/ 12 октября 2011

В вашей системе есть несколько цепочек для ключей:

sudo security list-keychains
"/Users/JonDoe/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"

Я думаю, что вы импортировали их в System-Keychain: сначала сделайте резервную копию ваших корневых сертификатов системы, прежде чем вносить какие-либо изменения (или любую другую цепочку для ключей, которую вывыберите):

cd /System/Library/Keychains/
sudo cp SystemRootCertificates.keychain SystemRootCertificates.keychain.old

Список всех цепочек для ключей / всех сертификатов в вашей цепочке для ключей:

ls -l /System/Library/Keychains/
sudo security dump-keychain /System/Library/Keychains/SystemRootCertificates.keychain

Со второй командой отображается каждый сертификат цепочки для ключей.Определите сертификат, который вы хотите удалить.Затем удалите сертификат с помощью следующей команды:

sudo security delete-certificate -Z <SHA-1 hash of certificate> /System/Library/Keychains/SystemRootCertificates.keychain
**alternative:**
sudo security delete-certificate -c <common name of certificate> /System/Library/Keychains/SystemRootCertificates.keychain

Вот и все.Теперь вы можете импортировать свой сертификат снова.В случае ошибки вы можете восстановить цепочку для ключей с помощью следующей команды:

sudo security import certificate_files_backup -k /System/Library/Keychains/SystemRootCertificates.keychain -t cert
0 голосов
/ 17 октября 2018

Вы можете удалить сертификат и ключ, запустив команду в терминале:

sudo security delete-identity -Z "SHA-1"

или

sudo security delete-identity -c "CommonName"

Сначала я думал, что удаляет только ключ, но на самом делеон также удаляет сертификат (вам просто нужно полностью закрыть цепочку для ключей и открыть ее снова, чтобы увидеть изменения - если вы проверяете его с помощью GUI).

С man security:

     delete-identity [-h] [-c name] [-Z hash] [-t] [keychain...]
        Delete a certificate and its private key from a keychain.  If no keychain arguments are provided, the default search list is used.

        -c name         Specify certificate to delete by its common name
        -Z hash         Specify certificate to delete by its SHA-1 hash
        -t              Also delete user trust settings for this identity certificate

Может потребоваться сначала разблокировать брелок (с man security):

 unlock-keychain [-hu] [-p password] [keychain]
        Unlock keychain, or the default keychain if none is specified.
...