Насколько я понял, существует два способа использования токенов PKCS # 11 в Java: использование API-интерфейсов Sun и использование некоторой проприетарной реализации. У каждого есть свои преимущества и недостатки. Основным преимуществом Sun'API является то, что он сопоставляет токены PKCS # 11 с обычными хранилищами ключей. Таким образом, BouncyCastle может получить доступ к закрытым ключам токена, фактически не выясняя, взаимодействует ли он с аппаратным устройством. Более того, любая нативная зависимость уже включена в JVM от Sun, и вам не нужно беспокоиться о переносе или поддержке нативного кода на разных платформах. Основным недостатком является то, что он нестандартный, поэтому вы не гарантированно найдете его на любой виртуальной машине Java. Коммерческие API (см. Оболочку PKCS11 от IAIK) хороши и даже имеют открытый исходный код, но у них есть два недостатка: они предназначены для работы с другим API (за который вы должны заплатить ...), поэтому они не предоставляют токен как KeyStore, и вы не можете использовать BouncyCastle прозрачно, и у них есть собственный компонент, который вы должны поддерживать и распространять. Если вам приходится работать с PKCS # 11 в браузере, вы знаете, что это за боль ...

аюсь настроить поставщика PKCS11 для доступа к смарт-карте. Я установил библиотеку PKCS11 в своей системе и следовал инструкциям вJava PKCS # 11 Справочное руководство, В ссылке они просто создают экземплярsun.security.pkcs11.SunPKCS11 и передайте имя файла конфигурации конструктору. Когда я пытаюсь скомпилировать следующий код

Provider p = new sun.security.pkcs11.SunPKCS11("pkcs11.cfg");
Security.addProvider(p);

Я получаю следующую ошибку.

Ограничение доступа: Конструктор SunPKCS11 (String) недоступен из-за ограничения на требуемую библиотеку /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/ext/sunpkcs11.jar

Что я делаю неправильно? Я использую Eclipse 3.5 с Java SE 1.6 под Ubuntu x86.

С уважением.