Прежде всего, я относительно новичок в Java (и не очень продвинутый в программировании вообще), поэтому, если я пропустил что-то очевидное, я заранее извиняюсь за то, что тратил ваше время ,Java-апплет не может получить доступ к хранилищу сертификатов Firefox
Я пытаюсь создать апплет, который будет иметь доступ к Firefox «Магазин сертификатов. Что было испорчено, так это то, что я поклялся, что этот код работал, когда я его написал, и сначала проверил его; Затем я сместился в компьютер и после перезагрузки он больше не работал и с тех пор.
Он всегда терпит неудачу в самом начале - в KeyStore ks = KeyStore.getInstance("PKCS11");
с
java.security.KeyStoreException: PKCS11 not found
at java.security.KeyStore.getInstance(Unknown Source)
и
Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available
at sun.security.jca.GetInstance.getInstance(Unknown Source)
Я не думаю, что есть что-то, что это актуально в коде, но до сих пор, вот функция, не удалось:
/* Process PDF with Firefox */
private static byte[] processFirefox() throws GeneralSecurityException, IOException, DocumentException {
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, "myPassword".toCharArray());
String alias = (String) ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, null);
Certificate[] chain = ks.getCertificateChain(alias);
@SuppressWarnings("unused")
TSAClient tsaClient = null;
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = (X509Certificate)chain[i];
String tsaUrl = CertificateUtil.getTSAURL(cert);
if (tsaUrl != null) {
tsaClient = new TSAClientBouncyCastle(tsaUrl);
break;
}
}
List<CrlClient> crlList = new ArrayList<CrlClient>();
crlList.add(new CrlClientOnline(chain));
return SignPDF.sign(chain, pk, DigestAlgorithms.SHA256, "PKCS11", CryptoStandard.CMS, "A Reason", "A Location", null, null, null, 0);
}
Сначала я подумал, что это потому, что я не специфицировал ify провайдера. Тогда я сделал, и ничего не изменилось. Что интересно, я также попробовал запустить тот же апплет в Chrome, и он дал мне ту же ошибку. Поэтому я предполагаю, что либо апплет не может получить доступ/читать хранилище сертификатов Firefox, либо что-то еще происходит совсем. Тот же код работает отлично, если я заменю PKCS11
на "Windows-MY", "SunMSCAPI"
и пароль для null
, поэтому я думаю, что это проблема, характерная для PKCS11/Firefox.
Итак, я мог бы действительно помочь с этим. Я прочитал буквально каждый хит Google на первых двух страницах результатов поиска, но либо я слишком зеленый для них, чтобы помочь, либо они действительно не были достаточно полезными.
Если я забыл добавить какую-либо важную информацию, которая поможет вам помочь, сообщите мне.
Спасибо! Ben
Я думал, что это может быть что-то вроде этого. Я попытался снизить настройки безопасности в java cpl до самого низкого значения. Я попытался настроить настройки безопасности браузера. Я попробовал подписанную банку без знака. Он просто не работает. Как сказано, он работает для типа «Windows-MY» и поставщика «SunMSCAPI», поэтому я предполагаю, что речь идет не о правах доступа Java. Я не совсем понял, как использовать FileReader. Я могу получить доступ к файлу cert8.db Firefox, но, как сказано, апплет не работает в KeyStore.getInstance, поэтому прежде чем я загружу KeyStore из InputStream. –
- Работает ли это, если вы просто извлекаете эту часть кода и запускаете ее как автономное приложение Java? - Проверьте это: http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html - Правильно ли настроен ваш провайдер? - Возможно, вы хотите попытаться динамически создать поставщика? 'String configName =" /opt/bar/cfg/pkcs11.cfg "; Поставщик p = new sun.security.pkcs11.SunPKCS11 (configName); Security.addProvider (p); ' – TFuto
Я перепроверял все несколько раз, возился с конфигом, пытался динамически создавать провайдера и запускать все как автономное приложение. Нет торта. Я начинаю думать, что я думал, что он работает в первый раз. Думаю, я просто попытаюсь найти альтернативный способ сделать это. NSS/JSS кажутся хорошими идеями, хотя мне нужно выяснить, как получить каталог профиля пользователя Firefox «на лету» (FF1.7 + больше не разрешает веб-страницы AFAIK). Но это еще один вопрос. –