问题标签 [sunpkcs11]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 9 中的 SunPKCS11 提供程序
在 Java 8 之前,SunPKCS11 提供程序的加载方式如下:
configFile
是一个带有配置参数的字符串。因此,如果应用程序需要使用多个连接的智能卡,它可以创建多个提供程序。要访问每个提供程序,使用的名称是“SunPKCS11-”,后跟我们在配置中指定的名称。
在 Java 8 中,sun.security.pkcs11.SunPKCS11
JDK 中删除了该类。所以,我不得不通过反射来编程之前的调用。
Java 9 中 PKCS#11 提供程序的操作似乎非常不同:
构造
SunPKCS11
函数已更改为空的。配置是通过“configure”方法加载的,所以它必须在磁盘上的文件中,我不能再通过流将它加载到字符串中。如果我们尝试使用反射,则会出现以下警告:
- 在 Java 9 中,会自动生成一个 SunPKCS11 提供程序,并在加密提供程序列表中。可以从列表中获取并配置。问题是您只能在列表中加载一个 PKCS#11 提供程序。Java 9 文档表明我们可以使用“SunPKCS11-”后跟我们在配置中指定的名称来获取 PKCS#11 提供程序,但事实并非如此。如果我们查看提供者列表,唯一的一个是“SunPKCS11”,所以我不能每个智能卡都有一个提供者。
这是否也发生在其他人身上?有什么解决办法吗?
java - sunpkcs11 是否支持使用 ECDH 派生密钥的 CK_sensitive 属性
我正在尝试使用具有某些属性的 SUNpkcs11 通过 ECDH 生成共享密钥:
虽然我的基本密钥已将 CKA_DERIVE、SENSITIVE 等设置为 true,但这样做时会出现模板不一致的错误:
而 ECC 密钥是使用 HSM 预先生成的。
java - 没有这样的算法:提供者 SunPKCS11-CartaoCidadao 的 PKCS11
有我目前的供应商:
0 - 提供者名称:SUN 1 - 提供者名称:SunRsaSign 2 - 提供者名称:SunEC
...
9 - 提供者名称:SunPKCS11-CartaoCidadao
第 9 个提供程序是我尝试使用的提供程序,它使用 pkcs11 库。
使用 info 方法,我可以看到它正在使用库:
SunPKCS11-CartaoCidadao 使用库 /usr/local/lib/libpteidpkcs11.so
然而,当我试图获取一个关键实例时,它告诉我该提供程序没有 PKCS11,它应该这样做。
java.security.KeyStoreException:未找到 PKCS11
引起:java.security.NoSuchAlgorithmException:没有这样的算法:PKCS11 for provider SunPKCS11-CartaoCidadao
任何人都知道如何解决这个问题?
java - PKCS#11 与 iText & eTPKCS11.dll & SunPKCS11 Provider 的签名
我在尝试使用链接到 eTPKCS11.dll 的 SunPKCS11 Provider 进行签名时遇到问题。即使使用 iText signDetached,在尝试简单签名时,我也总是得到“线程中的异常”java.security.ProviderException:sun.security.pkcs11.wrapper.PKCS11Exception:CKR_USER_NOT_LOGGED_IN”。
我成功获得PK,通过回调完成认证,回调直接返回令牌密码。似乎令牌需要另一个身份验证过程来进行签名?
该设备是SafeNet eToken 5110,运行在Win7 64位...
非常感谢!
结果:
java - java.security.NoSuchAlgorithmException:PKCS11 KeyStore 不可用,尝试在 java 11 中使用 SUNPKCS11 启用 FIPS 模式
我正在尝试在 Java 11 中使用带有 NSS 的 SUNPKCS11 启用 FIPS 模式。我得到了这个异常 java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available。
当我尝试在Java 8中启用 FIPS 时,它工作正常,但在Java 11中执行相同操作会引发异常。
SUNPKCS11 的初始化从 Java 8 更改为 Java 11。
在 Java 8 中:
爪哇 11:
使用配置文件初始化 SUNPKCS11 后,我试图从密钥库中获取提供程序,如下所示。
还有一件事是当我初始化 SUNPKCS11 时,它的Provider.id.info被设置为
Unconfigured and unusable PKCS11 provider,这有什么关系吗?
然后在这里我没有密钥库中的PKCS11。
我的配置文件内容如下所示:
我需要更改配置文件内容中的某些内容还是 Java 11 中的错误?
请帮助我提出宝贵的建议。
hsm - 使用 PKCS11 设置 Docker
背景
我们正在开发一个执行加密操作的 Spring 应用程序。项目的要求是这个应用程序的实现应该独立于 HSM 特定的库(因为客户端可能有任何 HSM),因此我们使用了 SunPKCS11 接口。SunPKCS11 接口需要一个 HSM 库文件的路径,该文件实现了常见的 PKCS11 接口。这样,任何具有库实现 PKCS11 接口的 HSM 都可以与应用程序一起使用。
当前状态
我们有用于测试 HSM 安装位置的主机。HSM 安装程序还提供了实现 PKCS11 接口的库。我们计划使用 Docker 部署这个应用程序。由于应用程序应该独立于 HSM 库,因此我们创建了 docker 映像,其中没有提及 HSM 特定信息。但是,我们使用 docker-compose 文件挂载了 HSM 的完整 lib 文件夹(其中存在 PKCS11 实现库)。当我们执行 docker-compose up 时,它会为属于 HSM 的库提供错误(尽管它安装在 lib 文件夹中)。
加载共享库 xxx.so 时出错
问题
- 在这种情况下我应该使用 docker 吗?我在互联网上看到了使用 docker 访问设备的讨论,答案主要是使用其他一些特定于设备的 docker 映像。但是,我不知道要与应用程序(在客户端)一起使用的 HSM 是否会有这样的 docker 映像。
- 如果是这样,挂载 HSM 的 lib 文件夹是个好主意吗?在 HSM 安装期间,我安装了 3 个 rpm 文件。这 3 个安装可能具有与 HSM 交互所需的其他库。
- 如果我正在做的是正确的方法,错误的原因是什么?
Dockerfile
码头工人撰写文件
我是 Docker 和 Linux 的新手。让我知道,以防我错过提及某些事情。
pkcs#11 - 使用 sunPKCS11 提供程序生成密钥对时的 CKR_USER_NOT_LOGGED_IN
尝试使用 sun PKCS11 提供程序生成 rsa 密钥对时,方法generateKeyPair()
抛出ProviderException: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_USER_NOT_LOGGED_IN
我的代码如下所示:
我尝试AuthProvider
在提供程序初始化后立即使用,如下所示:
但我没有看到任何日志输出,所以这意味着 lambdas 没有被执行。
最终目标是生成 RSA 密钥对并通过 PKCS11 将其存储在密钥库 (HSM) 中。
我尝试了 openjdk 8 和 oracle jdk 8。此外,当列出密钥库中的别名时,我得到一个空列表,但我知道有一个条目。添加-Djava.security.debug=sunpkcs11
没有任何改变。
java - 为什么列出 pksc11-tool 七个对象但 Java Keystore 只有一个
当我在 cmd 行中执行以下操作时:
我的智能卡上有 7 个对象、3 个公钥对象、3 个证书对象和一个私钥对象。
但是当我尝试用一个小的 Java 代码做同样的事情时,我只找到一个证书:
为什么我找不到带有此代码的公钥或其他证书?
java - 如何修复“删除令牌连接超时后重新连接 SunPKCS11”
我在连接超时后重新连接到 SUNPKCS11 时遇到问题,我想再次重新连接到 SUNPKCS11。
我第一次使用此代码连接到 SUNPKCS11。
它在 1 小时内超时。所以我创建方法 reconnect 用于重新连接到 SUNPCKS11
但是收到一条错误消息:
java.security.InvalidKeyException:私钥必须是 RSAPrivate(Crt)Key 的实例或具有 PKCS#8 编码"
和
令牌已删除。