Как подписать .cab файл?

ifani

Что-то я вообще не втыкаю (
Вот у меня есть .cer файл от Verysign'а и есть собранный .cab файл с апплетом - как теперь этот .cab подписать?
В доках написано:
To sign with an SPC file, the required options are /spc and /v if your private key is in a PVK file. If you private key in is a registry key container, /spc and /k are the required options.

Как из .cer файла получить .spc, нашёл - а откуда взять этот .pvk файл? Или что такое "registry key container" и как туда поместить ключ?

Svyatogor

pvk - это закрытый (приватный, секретный) ключ Вашего сертификата. Этот ключ должен экспортироваться той программой, которая создавала начальный запрос сертификата (который затем был подписан Verisign'ом и из него Вами был создан .spc файл). Я знаю как минимум два инструмента, которые могут создавать запросы сертификатов(и это не штатные средства Windows). Ну а "registry key container" - это, скорее всего, файл, в котором находятся как сертификаты, так и их секретные ключи (для тех сертификатов, для которых Вы являетесь владельцем).
Вам стоит обратиться к документации по ПО, которое вы использовали для создания запроса сертификата, либо указать это ПО здесь (чтобы можно было дать конкретный совет). Или Ваш *.cer - это публичный сертификат Verisigna? В этом случае Вам нужно ненавязчиво попросить Verisign прислать Вам их приватный ключ (после этого вы даже сможете подписывать сертификаты других людей, также, как это сейчас делаеть сам Verisign).

ifani

Спасибо, я примерно так и понял.
В общем, дело вот в чём:
Полученный от Verisign сертификат всё время использовался для подписания апплетов (а получен он уже довольно давно). Причём использовался не он сам, а файл .keystore, который просто копируешь к себе в профайл и дальше про подписывании указываешь только пароль и имя (наверное, имя ключа). Соответственно, запрос на сертификат, скорее всего, генерировался keytool.exe из jdk. На каком компе генерировался запрос, выяснить уже не реально, так что реестр не проверить. Хотя остался тот файл, который посылался в Verisign для получения сертификата.
Сейчас меня интересуют две мысли, точнее, три:
1) Может ли быть так, что для явовского jarsigner и мелкомягкого signer'a нужны разные сертификаты? Надеюсь всё-таки, что сертификат - это штука универсальная. Хотя после того, как оказалось микрософтовская ява не понимает подписанные апплеты, уже ничему не удивлюсь
2) Раз jarsigner'у для работы достаточно только файла .keystore, то, видимо, там хранится и private key - наверное, его можно оттуда как-то извлечь.
3) Самая главная мысль - наверное, завтра ещё почитаю, как работает jarsigner
И ещё очень важный вопрос:
Забив на попытки найти приватный ключ от имеющегося сертификата, сделал, как написано в хелпе - создал свой сертификат (ключ для него, как я понял, автоматически занёсся в реестр, поэтому подписалось всё без ошибок) и подписал им .cab. Но при попытке запустить апплет и обратится к диску валится SecurityException
Интересно, в чём может быть ошибка? Или это может быть из-за того, что сертификат самодельный?

Svyatogor

Причём использовался не он сам, а файл .keystore, который просто копируешь к себе в профайл и дальше про подписывании указываешь только пароль и имя (наверное, имя ключа).
Да, примерно так. На самом деле в .keystore-файле имя имеет либо сертификат (когда нет приватного ключа либо пара сертификат/ключ. При подписи как раз указывается имя пары публичный сертификат/закрытый ключ, в результате чего апплет подписывается закрытым ключом и к апплету прикладывается сертификат (содержащий открытый ключ и подписанный одной из известных Certificate autority). Файла, который посылался, недостаточно (он не содержит самого закрытого ключа). При работе с Java'вскими keystore нужно обращать внимание на один момент: само по себе хранилище (keystore) может иметь пароль для защиты, и каждый секретный ключ может иметь свой отдельный пароль. Таким образом, в некоторых случаях (генерация запроса для подписи, шифрование с приватным ключом) могут потребоваться оба пароля.
Далее, по вопросам
1) Нет, сертификаты подойдут одинаковые. Другое дело, что они могут быть записаны в одном из нескольких форматов и может быть необходимо конвертировать из одного формата в другой.
2) Извлечь можно, я даже сам писал такую утилиту (правда она только в одном формате может ключ экспортировать). Вас, скорее всего, устроит инструмент для конвертации Java Keystore в Microsoft PFX. Посмотрите в первую очередь здесь, там вроде бы все описано достаточно не плохо (в том числе, есть и подписывание *.cab файлов). Есть еще дискуссия, посвященная этому вопросу на сайте Sun'а, (и пара ссылылок по импорту 1 и 2, но это уже для полноты картины, может кому пригодится). Если будет нужно, могу вечером скинуть код для экспорта приватного ключа (может быть, его потом нужно будет конвертировать с использованием openSSL, либо чего-нибудь еще хотя первой ссылки должно быть достаточно.
3) Ничего сказать не могу, апплеты не подписывал.
И по последнему вопросу: есть два варианта. Первый - ему действительно не нравится то, что сертификат самодельный (хотя может быть, в таком случае должен выдаваться запрос). Второй - сертификат не подписан. Т.е. сертификат был создан, и Вы им сразу пытаетесь подписать. Такой вариант практически нигде не пройдет. В кратце - для подписи *.cab используется цепочка сертификатов (один сертификат - частный случай). При этом конечный сертификат (тот, который соответствует вашему закрытому ключу) подписывается закрытым ключом некоторого другого сертификата. Этот другой сертификат тоже входит в цепочку и может быть подписан закрытым ключом третьего сертификата. И т.д. Т.е. образуется некоторая цепочка сертификатов, каждый из которых подписан секретным ключом предыдущего. Исключением является последний сертификат в цепочке. Он подписывается своим собственным секретным ключом (обычно это сертификат Certificate Authority, например, той же Verisign). Возможная причина SecurityException в этом случае - не соблюдаются требования цепочки (в цепочке подписания нет корневого самоподписанного сертификата). В этом случае вам нужно создать самоподписанный сертификат (либо просто подписать своим ключом уже сгенерированный ранее). Ссылок не дам, но ключевые слова для поиска будут selfsigned certificate (ну естественно с добавлением слов create и т.п.).

ifani

оооо, огромное спасибо - похоже, что по первой ссылке есть абсолютно всё, что нужно
сейчас будут читать....

ifani

Только вот в той статье ссылка на утилиту не работает: http://tjworld.net/software/codesigning/JKS2PFX.zip

UPDATE:
Это, видимо, были проблемы с сетью - сейчас всё скачалось
Оставить комментарий
Имя или ник:
Комментарий: