问题标签 [opensc]

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.

0 投票
2 回答
2602 浏览

python - 使用 pkcs11 模块使用公钥加密数据失败

我正在使用 Python 的 pkcs11 包来访问存储在我的 Yubikey 5 上的 X.509 证书。使用 pkcs11 对象访问证书、公钥和私钥可以正常工作,就像签名和签名验证一样。但是,对于我的一生,我无法弄清楚为什么用公钥加密不起作用。这是我的代码:

上面的最后一行因pkcs11.exceptions.FunctionNotSupported错误而失败。我做了一些研究,我发现的解释似乎暗示我正在使用的 openSC 库文件 (*.so) 不支持此功能 (加密)。但是,考虑到签名功能可以正常工作,我很难相信。

为了确保我可以在会话上下文之外使用这个特定的公钥,我使用 Crypto 包尝试了以下代码:

因此,似乎使用我的独立公钥可以让我加密数据。但是为什么我不能在 pkcs11 令牌会话的上下文中这样做呢?

然后,我尝试使用 pkcs11 对象解密函数来尝试解密使用上面的 Crypto 模块生成的数据:

以上失败,出现 pkcs11.exceptions.MechanismInvalid错误。我尝试使用不同的机制,但所有这些都会导致相同的错误。有趣的是——似乎 pkcs11 对象至少允许我调用解密函数而不会抱怨它不受支持。

我还要提一件事。我检查了我的证书,并看到在 Extension -> Certificate Key Usage 下,它说:

我阅读了密钥加密数据加密之间的区别,并了解到密钥加密用于加密秘密(对称)密钥而不是数据。这可能是我不能为此令牌会话使用加密功能的原因吗?

任何反馈将不胜感激!

0 投票
0 回答
301 浏览

python - 使用 Python 访问智能卡 - Windows 操作系统上的 PyKCS11 - 库问题

环境:Windows操作系统

我正在尝试使用 PyKCS11 模块访问智能卡,但无法按照以下链接生成密钥对。

https://pkcs11wrap.sourceforge.io/api/samples.html#generate-a-key-pair

我很难为 PYKCS11LIB 文件指向 lib 文件。

或者

无论使用什么文件,以下都是错误:

请帮助我获得任何指针以在 Windows 操作系统上获取库文件错误解决方案。

0 投票
0 回答
793 浏览

openssl - 如何使用 HSM 和 OpenSsl 建立 TLS 连接

背景

我继承了以编程方式使用加密令牌与服务器建立 TLS 1.2 连接的任务。有问题的令牌是只读的 - 不允许提取私钥 - 智能卡。此令牌已在制造过程中初始化。令牌持有私钥和证书。

该令牌带有自己的 PKCS11 模块。

我已将 openssl 配置为在引擎中使用所述模块:

我已从 SmartCard 中提取证书并存储在sc_cert.pem.

问题

我尝试使用命令行建立与服务器的 TLS 连接:

执行上一个命令后,我收到以下输出:

此外,我尝试使用PKCS11 URI 方案变体来指定关键元素 bu 无济于事。

为了确认卡上存在私钥,我执行以下命令:

输出:

注意所有 3 个的 ID_HEX 和 LABEL - public、cert 和 private - 是相同的值。

问题

似乎由于我不知道的原因,openssl 引擎无法访问私钥。

我应该如何配置/调用 openssl 以在 TLS 1.2 身份验证(KeyExchange?)中使用我的令牌?

我的配置有问题吗?

我的关键 URL 有问题吗?

0 投票
1 回答
315 浏览

java - Ubuntu (Java Card - ISO7816) 上的智能卡模拟 - 指定目标 JCRE

我正在尝试在真正的 javacard 上构建和安装之前模拟OpenPGPIsoApplet 。我希望我的模拟环境尽可能与实际卡匹配。

这是我在 ATR 数据库中的卡片规格。它遵循 Java Card 2.2.2 和 Global Platform 2.1.1 规范。

我按照OpenSC GitHub 上的说明来模拟支持 vpcsd 的卡。这些说明以内置的jcardsim-3.0.4-SNAPSHOT.jar.

  1. 如何在jcardsim2.2.2 版中构建支持 virtualcard/vpcsd 的版本?

  2. 在构建 IsoApplet 时如何指定 Java Card 版本ant-javacard?我的 JDK 会影响我的选择吗?

我的环境是

我对 ant-javacard wiki 的版本控制页面有点困惑:https ://github.com/martinpaljak/ant-javacard/wiki/Version-compatibility

  1. 在什么情况下,我会使用 JDK 编译 .java 文件并在获取类文件时以不同的 JRE 版本为目标,以便使用转换器转换为特定的 JCDK 版本?我理解使用高 JDK 来获得更好的源代码功能,然后为特定的 JRE 进行编译,但当有针对 JCRE 的额外步骤时则不然。
0 投票
1 回答
121 浏览

smartcard - 如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)

我已经在我的 2.2.2 javacard 上安装了流行的 IsoApplet ( https://github.com/philipWendland/IsoApplet ) 并且已经能够使用pkcs11-toolandpkcs15-tool在卡上生成私钥并使用它们进行身份验证服务器通过 SSH。

另外,我能够成功地使用我的 Yubikey 5 ( https://www.yubico.com/products/services-software/personalization-tools/challenge-response/ ) 的挑战-响应来增加解密的安全性KeepassXC 数据库。

现在,我想将https://github.com/arekinath/YkOtpApplet添加到具有 IsoApplet 的同一个 javacard 中。外部应用程序如何与 javacard 上的单独应用程序交互?我可以将这两个应用程序放在同一个 javacard 上吗?限制只是卡上的存储空间吗?

我有两张卡可用:

  • 恩智浦 JCOP3 J3H145 Java 卡 3.0.4
  • JavaCOS A22 155K Java 卡 2.2.2
0 投票
0 回答
199 浏览

openssl - 在 HSM 上使用带有私钥的 openssl 进行签名

我正在使用 OpenSC/libp11 访问 HSM。我需要使用生成并存储在 HSM 上的私钥对一些数据进行签名。从 libp11 我使用以下功能:

EVP_PKEY *PKCS11_get_private_key(PKCS11_KEY *key);

获取指向表示私钥的 EVP_PKEY 结构的指针。接下来我使用 openssl 函数:

执行签名操作。所有这些函数都返回成功,甚至相应的 EVP_DigestVerifyInit/Update/Final 函数也返回成功。

我的问题是,就我而言,签名操作实际上是由 HSM 执行的吗?我没有显式加载 openssl pkcs11 引擎(将 NULL 传递给 EVP_DigestSignInit 中的 ENGINE* arg),我什至没有在我的 openssl conf 中添加引擎路径。如果没有使用 pkcs11 引擎,那么为什么 sign/veriy 函数会返回成功?

0 投票
1 回答
75 浏览

cryptography - 无法将 pkcs11-tool 与自定义 hsm 角色一起使用

我正在开发具有自定义用户角色的 HSM:加密用户。我如何使用 pkcs11-tool 在 Hsm 上登录或与该用户一起工作?它适用于用户或 SO 不确定如何使用特定于 hsm 的自定义角色。

0 投票
0 回答
256 浏览

pkcs#11 - 在 Windows 上编译 OpenSC

语境:

我正在按照开源项目 OpenSC https://github.com/OpenSC/OpenSC的指南在 Windows 上编译解决方案并获取 opensc-pkcs11.dll 模块以将其用于与 HSM 的通信(例如 OpenSSH) PKCS#11 标准。目前我正在使用最新的稳定版本 0.21.0(msi 安装程序),它运行良好。但是,当我使用https://github.com/OpenSC/OpenSC/wiki/Compiling-on-Windows指南使用 Visual Studio 开发人员命令提示符编译解决方案时,我可以成功构建库,但是 opensc-pkcs11.dll 始终返回 pkcs11 :0x5:CKR_GENERAL_ERROR 当我尝试使用它时,我不确定我在这里缺少什么。

设置:

  1. git 克隆https://github.com/OpenSC/OpenSC.git
  2. git checkout 30180986a08cf71fe4af4b50251a8bb5b1ab95af (0.21.0 提交正确版本)
  3. 手动创建构建的源文件
  4. nmake /f Makefile.mak

使用 VS 2019 的 x64 本机工具命令提示符为 x64 构建它。

这应该是根据指南,因为据我所知,我不需要 openpace/openssl/zlib 来编译 opensc-pkcs11。

问题总结:

  1. 如果我从版本https://github.com/OpenSC/OpenSC/releases版本 OpenSC-0.21.0 下载,编译后的 opensc-pkcs11.dll 按预期工作
  2. 如果我从基于 v0.21.0 提交的源代码编译它,我得到 0x5: CKR_GENERAL_ERROR 尝试将库用于例如 OpenSSH 时,测试其他/以前的提交也会发生这种情况,因为我怀疑我在这里遗漏了一些东西.

有没有人遇到过同样的问题?也许有一些任何人都可以分享的构建配置,所以我可以理解我在这里缺少什么?

0 投票
1 回答
75 浏览

openssl - 获取 OpenSSL 的 OpenSC PKCS11 引擎日志

我正在为 OpenSSL 使用 OpenSC 的 PKCS11 引擎。我想从 OpenSC 获取日志,也想强制登录。根据https://github.com/OpenSC/libp11/blob/master/README.md我可以使用 VERBOSE 和 FORCE_LOGIN 参数这样做,但我应该把它们放在哪里?

我试图将它们放入相应的 OpenSSL 配置部分:

但这无济于事。如何正确地将这些标志转发给 OpenSC?