繁体   English   中英

对sun.security.pkcs11.SunPKCS11的访问限制

[英]Access restriction on sun.security.pkcs11.SunPKCS11

我正在尝试设置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

我究竟做错了什么? 我在Ubuntu x86下使用Eclipse 3.5和Java SE 1.6。

最好的祝福。

查看项目的属性并打开“ Libraries选项卡。 我假设您已将JRE System Library设置为执行环境。 将其更改为工作区JRE或手动选择特定的JRE。

背景:通过选择执行环境,您说您要编写符合Java API的应用程序。 sun.security.pkcs11.SunPKCS11类位于sun包中,它将其标记为Sun Java实现的专有,并且不是标准Java API的一部分。

如果64 bit runtime on Windows使用64 bit runtime on Windows还有另一个原因。 在这种情况下,根本不存在必要的类。

解决方案:使用32位运行时。

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

转到项目属性, Java Build Path窗格,然后展开JRE System Library条目。 单击“ 访问规则”并单击“编辑...”按钮。 添加一个访问规则,使规则模式可访问 sun / security / pkcs11 / ** 这将使Eclipse停止抱怨。

出现该错误的原因是某些类仅假定由Sun JVM使用,并且对于较新版本的Eclipse,会发出警告检查以警告开发人员不正当/非法使用类。

另一个stackoverflow线程建议使用Bouncy Castle实现。 使用sun.security.pkcs11.SunPKCS11的奇怪问题:找不到指定的程序?

据我所知,在Java中使用PKCS#11令牌有两种方法:使用Sun API,并使用一些专有实现。 每个都有其优点和缺点。 Sun'API的主要优点是它将PKCS#11令牌映射到常规KeyStore上。 因此,BouncyCastle可以访问令牌中的私钥,而无需实际确定它正在与硬件设备进行交互。 此外,任何本机依赖项都已与Sun的JVM捆绑在一起,您不必担心在不同平台上移植或支持本机代码。 主要缺点是它不是标准的,所以不能保证在任何JVM上都能找到它。 商业API(参见IAIK的PKCS11包装器)很好,甚至是开源的,但是它们有两个缺点:它们可以与另一个API一起使用(你必须付费......),因此它们不会暴露令牌作为KeyStore,您不能透明地使用BouncyCastle,并且它们具有您必须维护和分发的本机组件。 如果您必须在浏览器中使用PKCS#11,那么您知道这是多么痛苦......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM