Tag: pkcs#11

让java IAIK PKCS11包装器适用于nfast

我想让IAIK PKCS11包装器与nfast一起工作。 它总是期待pkcs11wrapper库文件并抛出错误 – java.lang.UnsatisfiedLinkError:pkcs11wrapper(在java.library.path中找不到) 如何使用HSM提供的库文件( /opt/nfast/toolkits/pkcs11/libcknfast.so )? 任何帮助都非常感谢和遗忘!

Java Access Token PKCS11未找到提供程序

您好我正在尝试从Java中的智能卡访问密钥库。 我正在使用以下代码.. 我正在使用OpenSc http://www.opensc-project.org/opensc的Pkcs11实现 文件windows.cnf = name=dnie library=C:\WINDOWS\system32\opensc-pkcs11.dll Java代码 = String configName = “windows.cnf” String PIN = “####”; Provider p = new sun.security.pkcs11.SunPKCS11(configName); Security.addProvider(p); KeyStore keyStore = KeyStore.getInstance(“PKCS11”, “SunPKCS11-dnie”); =)(= char[] pin = PIN.toCharArray(); keyStore.load(null, pin); 执行时带=)的行(=抛出以下exception java.security.KeyStoreException: PKCS11 not found at java.security.KeyStore.getInstance(KeyStore.java:635) at ObtenerDatos.LeerDatos(ObtenerDatos.java:52) at ObtenerDatos.obtenerNombre(ObtenerDatos.java:19) at main.main(main.java:27) Caused by: java.security.NoSuchAlgorithmException: no such algorithm: […]

SunMSCapi的applet不能在linux下工作

我们已经为我们的网站创建了一个新网站,我们让用户使用我们设计的applet签署pdf文档。 问题是这个小程序仅在Windows操作系统中正常工作,我们希望将其扩展到Linux操作系统。 当我们在linux中运行applet时,我们收到以下错误消息: [opensc-pkcs11] reader-pcsc.c:896:pcsc_detect_readers:SCardListReaders失败:0x8010002e [opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers:返回:找不到读者[opensc-pkcs11] reader-pcsc.c :896:pcsc_detect_readers:SCardListReaders失败:0x8010002e [opensc-pkcs11] reader-pcsc.c:1015:pcsc_detect_readers:返回:没有读者发现java.security.NoSuchProviderException:没有这样的提供者:SunMSCAPI在sun.security.jca.GetInstance。 sun.security.jca.GetInstance.getInstance(未知来源)中的getService(未知来源) 我认为当我们尝试在我们的代码中使用此调用来读取存储在Windows操作系统中的证书时,问题就出现了: KeyStore keystore = KeyStore.getInstance(“Windows-MY”, “SunMSCAPI”); keystore.load(null, null); return keystore; 这是我们用来获取证书列表的函数。 public KeyStore obtenerCertificados() throws Exception { String osNombre = System.getProperty(“os.name”); String osArquitectura = System.getProperty(“os.arch”); String providerConfig = null; String configuracionPKCS11 = null; // LINUX if(osNombre.contains(new StringBuffer(“Linux”))) providerConfig = “name = OpenSC\nlibrary = […]

Java SSL客户端未选择智能卡密钥

我正在尝试使用爱沙尼亚身份证在java程序中进行SSL客户端身份validation。 这适用于针对银行网站和测试服务器(nginx或openssl s_server)的Chrome / Firefox。 但是,我的Java客户端(okhttp)适用于本地密钥库,并在尝试使用ID卡时失败。 我把它归结为这个测试用例,它重现了我在调试器和日志记录中看到的问题(-Djavax.net.debug = ssl:handshake)。 我可以与卡通信,例如我可以打印出相同密钥的证书。 我正在Mac OSX上搭载DigiDoc3客户端 。 我可以看到似乎导致密钥被忽略的exception sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ATTRIBUTE_TYPE_INVALID at sun.security.pkcs11.wrapper.PKCS11.C_GetAttributeValue(Native Method) at sun.security.pkcs11.P11Key.getAttributes(P11Key.java:275) at sun.security.pkcs11.P11Key.privateKey(P11Key.java:330) at sun.security.pkcs11.P11KeyStore.loadPkey(P11KeyStore.java:1311) at sun.security.pkcs11.P11KeyStore.engineGetEntry(P11KeyStore.java:943) at java.security.KeyStore.getEntry(KeyStore.java:1521) at sun.security.ssl.X509KeyManagerImpl.getEntry(X509KeyManagerImpl.java:276) at sun.security.ssl.X509KeyManagerImpl.getCertificateChain(X509KeyManagerImpl.java:107) at com.baulsupp.oksocial.TestMain.main(TestMain.java:37) 测试程序输出 1.0.Authentication ssl: KeyMgr: choosing key: Authentication (verified: OK) null null 测试代码 package com.baulsupp.oksocial; import java.io.ByteArrayInputStream; import java.io.IOException; import java.security.KeyStore; […]

PKCS11 deriveKey()和encrypt()返回3DES的不同结果

我正在使用HSM和PKCS11处理密钥派生问题,目前我无法理解为什么我看到完全不同的结果取决于我是否使用deriveKey()方法而不是使用encrypt()方法。 在这两种情况下,我都试图使用DESede / ECB / NoPadding算法来获得结果,但是根据我用来生成结果的方法(deriveKey与加密),我看到了不同的结果。 退一步以提供高级概述……我正在使用Global Platform使用的特定密钥派生方法来使用于智能卡的主密钥多样化。 该方法以主密钥和用于导出新密钥的8字节数据(多样化数据)开始。 div数据字节实际上只是使用DESede / ECB / NoPadding用主密钥加密,结果用作新导出的3DES密钥的一部分。 (实际上,执行了多次加密,并将结果连接在一起形成新密钥,但这不是问题。) 我在两种情况下都validation了主密钥,validation了两种情况下的多样化数据是相同的,validation了我使用相同的算法和相同的填充。 我也尝试将派生密钥模板更改为DES,2DES,3DES。 所有产生的结果都相似,只是长度不同。 目前我已经使用IAIK包装器(用Java编写的pkcs11包装器)实现了我的测试用例,我将在此处发布。 密钥只是一个测试密钥,div数据是样本div数据,因此这里没有敏感信息。 我首先在HSM中创建基本密钥,然后尝试使用多样化数据调用session.deriveKey()来获取新密钥。 派生的关键字节以hex打印(键值不正确,基于我当前工作的实现,它在内存中而不是在HSM中导出密钥)。 接下来,我只是初始化会话以使用主密钥执行加密,然后加密多样化数据。 这产生了预期值(再次根据工作实现进行检查)。 当我使用相同的基本密钥,相同的div数据和相同的加密算法时,我正在寻找的是对这些操作产生不同结果的原因的任何了解。 我不明白deriveKey()在表面下做了什么,我无法找到任何文档或源代码来解释这一点。 我必须能够使用deriveKey()方法,因为派生密钥在HSM之外不可用。 有任何见解赞赏。 Mechanism keyGenerationMechanism = Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN); List supportedMechanisms = Arrays.asList(token.getMechanismList()); if (!supportedMechanisms.contains(Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN))) { output_.println(“Mechanism not supported: DES3_KEY_GEN”); return; } // This is the master key that I want to […]

javafx上的sun.security.pkcs11

我尝试开发一个访问智能卡的javafx应用程序。 我有一个简单的概念certificate,如下所示: package javafxapplication7; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; import sun.security.pkcs11.SunPKCS11; public class SampleController implements Initializable { @FXML private Label label; @FXML private void handleButtonAction(ActionEvent event) { SunPKCS11 a = new SunPKCS11(); } @Override public void initialize(URL url, ResourceBundle rb) { // TODO } } 而exepcion是: Caused by: […]

在64位计算机上访问硬件PKCS11令牌

所以这就是我想要做的。 我有一个硬件令牌,上面有一些证书,我正在编写一个Java应用程序来尝试访问这些证书。 我在jre6中使用了SunPKCS11库,用于Windows 32位机器。 这是我如何访问证书的一小部分示例: String configName = “pkcs.cnf” String PIN = “123456”; Provider p = new sun.security.pkcs11.SunPKCS11(configName); Security.addProvider(p); KeyStore keyStore = KeyStore.getInstance(“PKCS11”); char[] pin = PIN.toCharArray(); keyStore.load(null, pin); 它工作得很好,我能够获得证书和一切。 现在我想在64位机器上做同样的事情。 但是我试图使用64位jre6库并且缺少SunPKCS11 jar文件(located in {java.home}/lib/ext 。因此我无法创建SunPKCS11对象。我的问题是,你做了什么我现在做什么?如何使用64位java库访问令牌上的证书?是否有人为此类任务编写了64位包装器?

SoftHSM2 java无法正常工作

我正在尝试在SoftHSM 2上进行POC,但有些我如何得到以下问题。 Exception in thread “main” java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_SLOT_ID_INVALID at sun.security.pkcs11.wrapper.PKCS11.C_GetSlotInfo(Native Method) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:365) … 2 more HSM配置文件: # SoftHSM v2 configuration file name= SoftHSM2 library = C:\SoftHSM2\lib\softhsm2-x64.dll slot=1 如果我评论slot = 1,那么我得到了 Exception in thread “main” java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:376) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:103) at SoftHSM.main(SoftHSM.java:50) […]

连接到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 CFG: name = pkcs11Test library = /usr/local/lib/libsofthsm.so slot = 1 问题是我有一些密钥对,我用pkcs11-tool添加它们。 softhsm的版本是1.2.1 为什么KeyStore中没有任何别名? 如何解决这个问题?

初始化后如何完成SunPKCS11 Provider?

我通过以下方式初始化了SunPKCS11提供商: Provider provider = new sun.security.pkcs11.SunPKCS11(“path_to_pkcs11.cfg”); Security.addProvider(provider); 然后我使用此提供程序初始化KeyStore以使用密钥进行密码操作。 KeyStore ks = KeyStore.getInstance(“PKCS11”, provider); ks.load(null, “password”.toCharArray()); 完成密码操作后, 如何使用PKCS11令牌完成会话? 我试过删除提供程序,但它没有用。 Security.removeProvider(“sunPCKS11ProviderName”); 下次我尝试与令牌通信时,我从令牌CKR_CRYPTOKI_ALREADY_INITIALIZED抛出此exception 更新 : 我努力了 sun.security.pkcs11.SunPKCS11.logout(); 但它也没有用。 我有一个用例,我必须使用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 […]