标签: pkcs#11

PKCS12密钥库和PKCS11密钥库之间有什么区别?

我对Java-NSS库感兴趣,而且我正在阅读Sun的P11指南.我对以下内容感到困惑:

使用PKCS12密钥库和PKCS11密钥库有什么区别?

密钥库只是一个密钥库,对吧?有什么不同吗?它们可以在任何方面互换使用吗?

java security nss pkcs#11 pkcs12

34
推荐指数
2
解决办法
4万
查看次数

Java 9中的SunPKCS11提供程序

在Java 8之前,SunPKCS11提供程序的加载方式如下:

Provider provider = new sun.security.pkcs11.SunPKCS11 (new ByteArrayInputStream (configFile.getBytes ()));
Security.addProvider (provider);
Run Code Online (Sandbox Code Playgroud)

configFile是带有配置参数的String.因此,如果应用程序需要使用多个连接的智能卡,它可以创建多个提供程序.要访问每个提供程序,使用的名称是"SunPKCS11-",后跟我们在配置中指示的名称.

在Java 8中,sun.security.pkcs11.SunPKCS11该类已在JDK中删除.所以,我不得不通过反思来编程前一个调用.

Java 9中PKCS#11提供程序的操作似乎非常不同:

  • SunPKCS11构造已更改为空单.配置由"configure"方法加载,因此必须将它放在磁盘上的文件中,我不能再通过流将其加载到字符串.

  • 如果我们尝试使用反射,则会出现以下警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by PruebaTarjeta (file:/C:/temp/pkcs11java9/classes/) to constructor
sun.security.pkcs11.SunPKCS11()
WARNING: Please consider reporting this to the maintainers of PruebaTarjeta
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)
  • 在Java 9中,SunPKCS11提供程序是自动生成的,位于加密提供程序列表中.它可以从列表中获取并进行配置.问题是您只能在列表中加载一个PKCS#11提供程序.在Java的9文档 …

java pkcs#11 java-9 sunpkcs11

19
推荐指数
1
解决办法
4421
查看次数

对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);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

访问限制:由于对所需库的限制,无法访问构造函数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.

最好的祝福.

java security provider smartcard pkcs#11

15
推荐指数
4
解决办法
3万
查看次数

网站PKSC#11智能卡身份验证和SSL客户端证书

由于斯堪的纳维亚国家的法律要求,我们正在为网站创建三因素身份验证.客户使用NetID品牌的浏览器插件在浏览器中执行PKCS#11证书身份验证.智能卡由客户的合作伙伴集中供应.

该主题没有太多的在线资源或教程.有人会有任何指向示例实现或教程的指针如何在Web浏览器中进行PKCS11身份验证?

编辑:找到有关SSL客户端证书

  • 看起来认证方法是SSL客户端证书

  • 我们如何管理用户与智能卡之间的关系?

  • 用户是否向我们提供了他们的公钥,我们对他们进行身份验证?

  • 我们是否需要使用我们自己的证书单独签署/配置每个用户?

  • 是否所有用户智能卡都包含一个"通用"密钥,我们根据提供商证书进行测试?

http://www.garex.net/apache/

http://www.impetus.us/~rjmooney/projects/misc/clientcertauth.html

https://en.wikipedia.org/wiki/PKCS11

https://service.secmaker.com/examples/plugin.aspx

authentication ssl http smartcard pkcs#11

14
推荐指数
1
解决办法
2万
查看次数

带有opensc pkcs#11提供程序的java keytool仅适用于启用调试选项

我在ubuntu 11.10上使用OpenJDK(java版"1.6.0_22")运行最新的opensc 0.12.2

我可以阅读我的智能卡(飞天ePass PKI)

pkcs15-tool --dump
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用带有keytool的智能卡:

keytool 
   -providerClass sun.security.pkcs11.SunPKCS11 \
   -providerArg /etc/opensc/opensc-java.cfg \
   -keystore NONE -storetype PKCS11 -list 
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

keytool error: java.security.KeyStoreException: PKCS11 not found
java.security.KeyStoreException: PKCS11 not found
    at java.security.KeyStore.getInstance(KeyStore.java:603)
    at sun.security.tools.KeyTool.doCommands(KeyTool.java:621)
    at sun.security.tools.KeyTool.run(KeyTool.java:194)
    at sun.security.tools.KeyTool.main(KeyTool.java:188)
Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
    at java.security.Security.getImpl(Security.java:696)
    at java.security.KeyStore.getInstance(KeyStore.java:600)
    ... 3 more
Run Code Online (Sandbox Code Playgroud)

当我运行相同的命令时启用调试选项,如下所示:

keytool 
   -providerClass sun.security.pkcs11.SunPKCS11 \
   -providerArg /etc/opensc/opensc-java.cfg \
   -keystore NONE -storetype PKCS11 -list \
   -J-Djava.security.debug=sunpkcs11
Run Code Online (Sandbox Code Playgroud)

它突然起作用:

... debug infos ...
Enter keystore password:  
sunpkcs11: login …
Run Code Online (Sandbox Code Playgroud)

java keytool smartcard pkcs#11

11
推荐指数
1
解决办法
2万
查看次数

JCA/JCE和PKCS#11如何协同工作?

我想使用HSM(硬件安全模块)来创建XML文件的签名.我做了一些研究,但现在有点困惑.

你能否澄清一下这些问题:

  1. JCE中的键柄是什么意思?我已经读过它,它只是一个句柄而且密钥存储在其他地方.怎么可能?根据我的理解,我要么将密钥加载到内存中并使用它,要么签名完全由HSM完成,我只得到结果,对吧?
  2. PKCS#11标准是否定义了一种方式,以便在HSM中生成签名?我读过关于令牌的内容,但我不确定签名.
  3. 我的HSM的功能列表分别表示JCE和PKCS#11.那是什么意思?
  4. 我认为PKCS#11是一个标准,JCE定义了使用该标准的类.JCE是否指定了自己的协议?

java jce pkcs#11

11
推荐指数
1
解决办法
7604
查看次数

初始化后如何完成SunPKCS11 Provider?

我通过以下方式初始化了SunPKCS11提供商:

Provider provider = new sun.security.pkcs11.SunPKCS11("path_to_pkcs11.cfg");
Security.addProvider(provider);
Run Code Online (Sandbox Code Playgroud)

然后我使用此提供程序初始化KeyStore以使用密钥进行密码操作.

KeyStore ks = KeyStore.getInstance("PKCS11", provider);
ks.load(null, "password".toCharArray());
Run Code Online (Sandbox Code Playgroud)

完成密码操作后,如何使用PKCS11令牌完成会话?

我试过删除提供程序,但它没有用.

Security.removeProvider("sunPCKS11ProviderName");
Run Code Online (Sandbox Code Playgroud)

下次我尝试与令牌进行通信时,我会从令牌CKR_CRYPTOKI_ALREADY_INITIALIZED中抛出此异常

更新:

我试过了

sun.security.pkcs11.SunPKCS11.logout();
Run Code Online (Sandbox Code Playgroud)

但它也没有用.

我有一个用例,我必须使用PKCS#11 Wrapper和Provider.为了能够使用包装器,我必须最终确定提供者,否则CKR_CRYPTOKI_ALREADY_INITIALIZED 当包装器尝试与令牌通信时,令牌会抛出错误.

更新代码:

我正在使用Sun的PKCS#11 Provider和IAIK的PKCS#11 Wrapper.

public static void providerAndWrapperIssue() throws Exception
{
    final String name = "ANY_NAME";
    final String library = "LOCATION OF THE TOKENS DLL/SO";
    final String slot = "SLOT NUMBER";

    // SUN PKCS#11 Provider -------------------------------------------

    StringBuilder builder = new StringBuilder();
    builder.append("name=" + name);
    builder.append(System.getProperty("line.separator"));
    builder.append("library=\"" + library + …
Run Code Online (Sandbox Code Playgroud)

java pkcs#11 hsm

10
推荐指数
1
解决办法
3940
查看次数

从没有PIN /密码的PKCS11智能卡获取证书

摘要:当通过OpenSC在PKCS11上使用JCA时,在提取证书时会请求PIN.

我有一个需要使用智能卡签名的应用程序.OpenSC支持智能卡,因此我使用Java内置的pkcs11包装提供程序来使用它.出于功能原因,我需要在没有请求PIN的情况下获取卡中的证书.如果用户最终签名,那么当然需要PIN.

我发现我可以在不提供PIN的情况下从命令行执行此操作:

pkcs11-tool --module C:\WINDOWS\system32\opensc-pkcs11.dll -r -a 50-MDS_Signature -y cert -o p.cer
Using slot 1 with a present token (0x1)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

Oracle的文档明确指出"构建器将根据需要使用先前配置的回调处理程序提示输入密码"(http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#登录).但是,KeyStore ks0 = ksbuilder0.getKeyStore();即使只提取公共信息(例如证书),我的代码总是请求引脚作为我的电话.

遵循代码的摘录:

private static final String PKCS11_LIB = "C:\\WINDOWS\\system32\\opensc-pkcs11.dll";
private static final String NAME = "OpenSCpkcs11";
private static final String SLOT = "1";
private static final String PIN = "11111111";
private static final String ALIAS = "myCert";

[...]

private static CallbackHandler myCallbackHandler = new CallbackHandler() {
    @Override
    public void handle(Callback[] callbacks) …
Run Code Online (Sandbox Code Playgroud)

java pkcs#11

9
推荐指数
2
解决办法
2万
查看次数

连接到SoftHSM java

码:

String pkcs11cfg = "pkcs11.cfg";
Provider p = new SunPKCS11(pkcs11cfg);
Security.addProvider(p);

KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, pin);

System.out.println(ks.size()); // prints 0
Run Code Online (Sandbox Code Playgroud)

CFG:

name = pkcs11Test
library = /usr/local/lib/libsofthsm.so
slot = 1
Run Code Online (Sandbox Code Playgroud)

问题是我有一些密钥对,我用pkcs11-tool添加它们.
softhsm的版本是1.2.1
为什么KeyStore中没有任何别名?如何解决这个问题?

java keystore pkcs#11 softhsm

8
推荐指数
1
解决办法
5958
查看次数

如何使用智能卡在Web应用程序(JavaScript)中制作数字签名?

我们编写了一个文档管理系统,并希望使用Web客户端对文档进行数字签名.我们的Java客户端应用程序已经能够应用和检查数字签名,但我们希望甚至可以使用我们的Web客户端进行签名.这是用GWT编写的,因此,当在客户端运行时,它是一个JavaScript应用程序.

我们不想创建Java applet并将其下载到客户端并执行它.我们希望使用浏览器安全设备或浏览器API来签署文档.我们还希望保留完整的文档服务器端,并仅向客户端移动文档哈希.

我们认为这应该可以使用NSSnpapi/npruntime,但我们没有找到任何关于此的信息.(顺便说一句,在IE中也可以使用npruntime吗?我们应该使用ActiveX来实现与IE相同的结果吗?)

你有什么提示吗?

npapi digital-signature pkcs#11

8
推荐指数
2
解决办法
2万
查看次数