Как подписать Java-апплет с помощью файла .pfx? - PullRequest
4 голосов
/ 13 апреля 2011

Я пытался подписать архив апплета jar с помощью сертификата нашей компании .pfx, используя это руководство
(и несколько других из интернета):
http://www.globalsign.com/support/ordering-guides/SignJavaCodeAppletsPFX.pdf

Все вроде бы нормально, но когда я пытаюсь запустить apple через браузер, я вижу, что
«Издатель» НЕИЗВЕСТЕН ​​(недоверен). И когда я иду к деталям, я могу видеть правильную компанию
имя и сертификат поставщика (GlobalSign). Почему он не отображается должным образом как известный / доверенный?

Единственное, что мне кажется подозрительным, это вывод команды
jarsigner -verify -verbose -certs Applet.jar:

  (...)
  sm      1936 Wed Apr 13 03:00:50 CEST 2011 org/my/Applet.class

  X.509, CN=CompanyName, O=CompanyName, L=Tilst, ST=ProperState, C=DK
  [certificate is valid from 18.02.10 14:58 to 18.02.13 14:58]

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

Похоже, что "k = по крайней мере один сертификат был найден в хранилище ключей" отсутствует
(должно быть смк и это см). Это подписано только частично? Или что?

Возможно ли, что файл .pfx, данный мне GlobalSign, как-то не так
на недостаточно подписать апплеты? Для обычных исполняемых файлов это работало просто отлично ...

Есть идеи? ;)

РЕДАКТИРОВАТЬ

@ Jcs

Похоже, ты совершенно прав. Я проверил свой файл PFX с помощью keytool, и я получил:

Your keystore contains 1 entry

Alias name: company_alias
Creation date: Apr 13, 2011
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:

Похоже, цепь не завершена.
Я не уверен, имеет ли это значение, но есть также несколько расширений, таких как, например:

#1: ObjectId: (some_numbers_here) Criticality=true
KeyUsage [
  DigitalSignature
]

#2: ObjectId: (some_numbers_here) Criticality=false
AuthorityInfoAccess [
  [
   accessMethod: (some_numbers_here)
   accessLocation: URIName: http://secure.globalsign.net/cacert/ObjectSign.crt]
]
(...)

Вопрос: мой файл PFX полностью неверен, или мне как-то нужно добавить в него корень globalsign?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

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

(...)
sm      2419 Thu Mar 31 15:49:14 CEST 2011 org/xml/sax/helpers/XMLReaderFactory.class

      X.509, CN=Company Name, O=Company Name, L=Paris, ST=Ile de France, C=FR
      [certificate is valid from 8/4/10 2:00 AM to 8/4/12 1:59 AM]
      X.509, CN=Thawte Code Signing CA - G2, O="Thawte, Inc.", C=US
      [certificate is valid from 2/8/10 1:00 AM to 2/8/20 12:59 AM]
      [KeyUsage extension does not support code signing]

(...)

Мы видим, что в цепочке 2 сертификата, так как мой сертификат подписания был выдан с помощью подписи кода ThawteCA .

В вашем случае, если в выводе jarsigner имеется только один сертификат, это может указывать на отсутствие промежуточного CA, и я вряд ли сомневаюсь, что GlobalSign напрямую выдает сертификаты из корневого CA (который находится в магазине доверия java).Поэтому, когда апплет загружен и подписи проверены, JVM не может перестроить цепочку сертификатов между сертификатом подписи и корневым CA GlobalSign, объясняя текущее поведение.

Возможно, файл PKF не содержит этогопромежуточный CA.С помощью OpenSSL вы можете проверить, сколько сертификатов присутствует:

[jcs@home:~/]$ openssl pkcs12 -in myfile.pfx

или с помощью keytool

[jcs@home:~/]$ keytool -list -v -storetype pkcs12 -keystore myfile.pfx
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: 2
Creation date: Aug 4, 2010
Entry type: PrivateKeyEntry
Certificate chain length: 2     <--  the chain length is here.
Certificate[1]:
(...)
0 голосов
/ 14 апреля 2011

Большое спасибо всем, особенно Jcs:)
Наконец я обнаружил, что файл .pfx был импортирован неправильно.
Я попросил моего босса импортировать его для меня с нуля со всеми возможными путями / цепями / сертификатами, и теперь он работает:)
Поэтому, если у кого-то возникнут аналогичные проблемы, я советую снова попытаться получить / импортировать сертификат
- это скорее проблема с самим сертификатом, чем с методом подписи.

...