Ограничение доступа к sun.security.pkcs11.SunPKCS11 - PullRequest
15 голосов
/ 02 марта 2011

Я пытаюсь настроить поставщика 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.

С наилучшими пожеланиями.

Ответы [ 5 ]

21 голосов
/ 02 марта 2011

Просмотрите свойства проектов и откройте вкладку Libraries. Я предполагаю, что вы установили JRE System Library в среду выполнения. Измените его на JRE рабочей области или выберите конкретную JRE вручную.

Справочная информация: Выбирая среду исполнения, вы говорите, что хотите написать приложение, совместимое с Java API. Класс sun.security.pkcs11.SunPKCS11 находится в пакете sun, который помечает его как проприетарный для реализации Sun Java, и не является частью стандартного API Java.

6 голосов
/ 17 мая 2013

Существует еще одна причина, если вы используете 64 bit runtime on Windows.В этом случае необходимые классы просто отсутствуют.

Решение: используйте 32-разрядную среду выполнения.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6880559

6 голосов
/ 31 мая 2011

Перейдите в свойства своего проекта, Панель Java Build Path и разверните запись JRE System Library.Нажмите Правила доступа и нажмите кнопку Изменить ....Добавьте Правило доступа, которое делает Доступным Шаблон правила sun / security / pkcs11 / **.Это заставит Затмение перестать ныть.

4 голосов
/ 02 марта 2011

Причиной этой ошибки является то, что некоторые классы предполагается использовать только в Sun JVM, а в более новых версиях Eclipse была введена проверка, предупреждающая разработчика о неправильном / незаконном использовании классов.

Другой поток stackoverflow рекомендует использовать реализацию Bouncy Castle. Странная проблема с использованием sun.security.pkcs11.SunPKCS11: указанная процедура не найдена?

3 голосов
/ 17 марта 2011

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

...