Возникли проблемы с настройкой хранилища ключей для подписи кода в Linux

Я пытаюсь настроить хранилище ключей для подписи кода на нашем сервере сборки Linux, и у меня возникают проблемы с этим. Справочная информация. Мы используем обе среды IDE Netbeans для разработки приложения, которое мы выпускаем как в виде jar-файла, так и в виде исполняемого файла (со встроенной JRE, чтобы избежать проблем с совместимостью). Разработка выполняется на наших ПК с Windows 7, но сервер сборки размещен на сервере сборки Linux. Мы используем Ант. Проблема: мне нужно настроить хранилище ключей, чтобы тот же Ant build.xml генерировал подписанный файл jar (и exe-файл) на моем ПК, а также мог генерировать тот же подписанный jar-файл и exe-файл на сервере сборки. . Я получил PFX-файл отдела от нашего ИТ-отдела, а также промежуточный и корневой сертификаты. Эти 3 элемента ДОЛЖНЫ обеспечивать полную цепочку (я думаю). Я пробовал разные способы импортировать их на наш Linux-ПК, но безуспешно. Я использовал openssl для извлечения pem-сертификата и pem-закрытого ключа из pfx и попытался импортировать их во вновь созданный файл .keystore на ПК с Linux, но до сих пор не могу заставить ни jarsigner подписать jar, ни signtool подписать EXE. когда я набираю: jarsigner -keystore .keystore .jar ... я получаю ... jarsigner: цепочка сертификатов не найдена для: daqkey. daqkey должен ссылаться на допустимую запись ключа KeyStore, содержащую закрытый ключ и соответствующую цепочку сертификатов открытого ключа. Как я могу убедиться, что закрытый ключ хранилища ключей имеет правильную цепочку сертификатов? Я попробовал команду keytool -list, но не знаю, что я ищу в результирующем выводе. Кто-нибудь может помочь?

ПОДРОБНЕЕ: после использования jarsigner для попытки подписать файл jar я получаю следующие результаты: smk 5763 Thu Aug 06 10:54:02 CDT 2015 com/nov/cp/daqconfigtool/resources/log-configuration.xml

  X.509, CN="myCompanyName", O="myCompanyName", L=Houston, ST=Texas, C=US (daqkey)
  [certificate is valid from 3/31/15 10:11 AM to 4/1/16 4:18 AM]
  X.509, CN=Entrust Code Signing Certification Authority - L1D, OU="(c) 2009 Entrust, Inc.", OU=www.entrust.net/rpa is incorporated by reference, O="Entrust, Inc.", C=US
  [certificate is valid from 11/11/11 9:29 AM to 11/11/21 9:28 PM]
  X.509, CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net
  [certificate is valid from 3/23/09 10:18 AM to 3/23/19 10:48 AM]
  X.509, CN=Entrust.net Secure Server Certification Authority, OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), O=Entrust.net, C=US
  [certificate is valid from 5/25/99 11:09 AM to 5/25/19 11:39 AM]

  [entry was signed on 8/7/15 9:21 AM]
  X.509, CN="myCompanyName", O="myCompanyName", L=Houston, ST=Texas, C=US (daqkey)
  [certificate is valid from 3/31/15 10:11 AM to 4/1/16 4:18 AM]
  [CertPath not validated: Path does not chain with any of the trust anchors]

Есть идеи?


person Romeo Riojas    schedule 10.08.2015    source источник
comment
Я попробовал ваше предложение (или на самом деле шаги в ссылке). Я действительно «кажется» работать и дал мне ответ «jar проверен» в командной строке, но при просмотре свойств в Windows не было вкладки «Цифровая подпись». Он не был подписан. И это определенно был один и тот же файл (я пробовал дважды, чтобы убедиться, что все пути правильные и т. д.)   -  person Romeo Riojas    schedule 10.08.2015
comment
Дополнительная информация (и больше головной боли): я просмотрел содержимое файла *.pfx нашего корпоративного отдела. Он содержит один PrivateKeyEntry и цепочку сертификатов из 4 записей. 2 помечены как SHA256 с RSA, а другие 2 — как SHA1 с RSA. Оценивая поля SubjectKeyIdentifier и AuthorityKeyIdenfier каждой из четырех записей сертификата, я вижу, что каждый ключ субъекта сертификата указывает через свой ключ полномочий на другую запись сертификата. PrivateKeyEntry указывает на один из сертификатов, а последний сертификат указывает на самого себя. Но я не могу импортировать цепочку сертификатов в свое хранилище ключей.   -  person Romeo Riojas    schedule 12.08.2015
comment
Вкладка подписи в свойствах Windows FileExplorer предназначена только для подписей аутентификации в формате Microsoft на исполняемых файлах (.exe, .dll, независимо от того, что dotnet использует в этом году). Он не знает о сигнатурах jar. Если jarsigner -verify это нравится, и особенно если jarsigner -verify -verbose показывает smk для ваших записей, это подписано. Если вы хотите, чтобы файл .exe был подписан, вам нужен инструмент, отличный от jarsigner, но я не знаю какой; Я бы начал искать поблизости от любого инструмента, создающего .exe.   -  person dave_thompson_085    schedule 14.08.2015
comment
Кроме того, Java поддерживает несколько форматов хранилищ ключей, а PKCS#12 является хранилищем ключей; но если вам нужно именно хранилище ключей в формате JKS, вы можете преобразовать его с помощью keytool -importkeystore -srckeystore p12file -srcstoretype pkcs12 -destkeystore jksfile (вам не нужно указывать -deststoretype jks, потому что это значение по умолчанию). Как для PKCS#12, так и для JKS keytool -list -v (обратите внимание на -v) покажет вам полную цепочку сертификатов для записи PrivateKey (или каждую запись, если их несколько, что бывает редко).   -  person dave_thompson_085    schedule 14.08.2015
comment
@dave_thompson_085: Спасибо. Это действительно помогает. Да, я знал, что вы используете jarsigner только для подписи jar-файлов, и я планировал использовать код подписи Mono для подписи нашего exe. Я все еще пытаюсь определить, завершено ли наше хранилище ключей. Приведенное выше сообщение об ошибке, по-видимому, указывает на то, что это не так (т. Е. CertPath не проверен. Путь не связан ни с одним из якорей доверия.   -  person Romeo Riojas    schedule 14.08.2015