Как импортировать закрытый ключ самозаверяющего сертификата с помощью certmgr в моно

Я столкнулся с проблемой, из-за которой я не могу импортировать закрытый ключ сертификата в хранилище сертификатов/пар ключей monos с помощью встроенного инструмента certmgr.

Добавление общедоступной версии сертификатов в хранилище отлично работает с использованием

user@maschine:~certs$ certmgr -add -c My MyCert.crt
Mono Certificate Manager - version 2.10.8.1
Manage X.509 certificates and CRL from stores.
Copyright 2002, 2003 Motus Technologies. Copyright 2004-2008 Novell. BSD licensed.

1 certificate(s) added to store My.

Однако попытка добавить соответствующий закрытый ключ заканчивается исключением

user@maschine:~certs$ certmgr -add -c My MyCert.p12
Mono Certificate Manager - version 2.10.8.1
Manage X.509 certificates and CRL from stores.
Copyright 2002, 2003 Motus Technologies. Copyright 2004-2008 Novell. BSD licensed.


Unhandled Exception: System.Security.Cryptography.CryptographicException: Invalid MAC - file may have been tampered!

Попытка сначала добавить общедоступную версию (.cer), а затем импорт соответствующего закрытого ключа из частной версии (.p12) не удалась, но с немного другим исключением:

user@maschine:~certs$ certmgr -add -c My MyCert.crt
Mono Certificate Manager - version 2.10.8.1
Manage X.509 certificates and CRL from stores.
Copyright 2002, 2003 Motus Technologies. Copyright 2004-2008 Novell. BSD licensed.

1 certificate(s) added to store My.
user@maschine:~certs$ certmgr -importKey -c My MyCert.p12
Mono Certificate Manager - version 2.10.8.1
Manage X.509 certificates and CRL from stores.
Copyright 2002, 2003 Motus Technologies. Copyright 2004-2008 Novell. BSD licensed.

Unhandled Exception: System.Security.Cryptography.CryptographicException: Improperly protected user's key pairs in '/var/licapp/.config/.mono/keypairs'.

Защита сертификата паролем (и добавление соответствующего параметра в команду) тоже не помогает.

Я использую моно V 2.10.8.1 на Debian Wheezy. Кто-нибудь знает, как добавить дескрипторы сертификатов в хранилища и обрабатывать их пары ключей с помощью certmgr?

Я рассматриваю обходной путь, при котором я просто храню p12-файлы под своим приложением, не используя хранилища, что, я думаю, было бы гораздо более нечистым решением. Но я просто не могу добавить в магазин как сертификат, так и пару ключей.

Сертификаты вроде в норме. Добавление их в Магазин под Windows работает нормально.


person nozzleman    schedule 09.02.2015    source источник


Ответы (1)


Есть некоторые проблемы с документацией, и инструмент ведет себя немного странно или местами неправильно...

  1. Разрешения на каталог пар ключей установлены неправильно, когда программа их создает. chmod 700 ~/.config/.mono/keypairs разрешил перечисленное вами исключение.
  2. Когда вы используете действие -importKey, вам все равно нужно указывать сертификат объектного типа, хотя на странице руководства не говорится, что вы должны использовать объектный тип. Кроме того, нет типа объекта «закрытый ключ», вместо этого используется тип объекта «сертификат» (-c). Бывший. certmgr -importKey -c -v -p p12password My CertAndKeyPair.p12 выдает мне сообщение об успехе.
  3. После шага 2 сертификат/ключ останутся недоступными. После импорта P12 импортируйте сертификат в кодировке DER. Бывший. certmgr -add -c My Certificate.cer Это должно сделать сертификат/ключ доступным для вашего кода .NET.
  4. Если вы хотите установить сертификаты/ключи в машинное хранилище (-m), вы должны использовать sudo.
person TravisThomas    schedule 10.07.2015
comment
Спасибо, наконец-то я смог импортировать свой pfx с помощью команды на шаге 2. Несмотря на то, что для моего сертификата не был установлен пароль, для его работы все равно требовалось указать -p "". Я думаю, что это ошибка в старых версиях моно (у меня 4.2.1), см. обсуждение здесь: bugzilla.xamarin.com/show_bug.cgi?id=35064 - person E. Moffat; 21.09.2018