2011-03-02 4 views
15

Я пытаюсь настроить поставщика PKCS11 для доступа к смарт-карте. Я установил библиотеку PKCS11 в свою систему и выполнил инструкции в Java PKCS#11 Reference Guide. В ссылке они просто создают экземпляр sun.security.pkcs11.SunPKCS11 и передают имя конфигурационного файла конструктору. Когда я пытаюсь скомпилировать следующий кодОграничение доступа к 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.

С уважением.

ответ

21

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

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

+1

Переход из библиотеки JRE в рабочую область JRE привел к исчезновению предупреждения. Thanx! –

4

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

В другой потоке stackoverflow рекомендуется использовать реализацию Bouncy Castle. Weird problem using sun.security.pkcs11.SunPKCS11: The specified procedure could not be found?

+0

Но когда это не нормально, чтобы использовать этот класс, поэтому он используется в справочном руководстве, и что будет llegal способ загрузки динамически поставщика PKCS 11? –

+0

Я уже читал эту статью. Но в этой статье http://permalink.gmane.org/gmane.comp.encryption.bouncy-castle.devel/2060 Я читал, что Bouncycastle не поддерживает PKCS11. –

+0

Bouncy Castle - альтернативный поставщик и библиотека криптографии Java, поэтому Oracle «Sun» не ограничивается использованием «из коробки». – Fa11enAngel

3

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

6

Перейти к вашим свойствам проекта, Путь построения Java и развернуть запись в Системной библиотеке JRE. Нажмите Правила доступа и нажмите кнопку «Изменить ...». Добавить правило доступа, которое составляет Доступно Правило Pattern sun/security/pkcs11/**. Это заставит Eclipse перестать ныть.

 Смежные вопросы

  • Нет связанных вопросов^_^