问题标签 [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.
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 下,它说:
我阅读了密钥加密和数据加密之间的区别,并了解到密钥加密用于加密秘密(对称)密钥而不是数据。这可能是我不能为此令牌会话使用加密功能的原因吗?
任何反馈将不胜感激!
python - 使用 Python 访问智能卡 - Windows 操作系统上的 PyKCS11 - 库问题
环境:Windows操作系统
我正在尝试使用 PyKCS11 模块访问智能卡,但无法按照以下链接生成密钥对。
https://pkcs11wrap.sourceforge.io/api/samples.html#generate-a-key-pair
我很难为 PYKCS11LIB 文件指向 lib 文件。
或者
无论使用什么文件,以下都是错误:
请帮助我获得任何指针以在 Windows 操作系统上获取库文件错误解决方案。
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 有问题吗?
java - Ubuntu (Java Card - ISO7816) 上的智能卡模拟 - 指定目标 JCRE
我正在尝试在真正的 javacard 上构建和安装之前模拟OpenPGP和IsoApplet 。我希望我的模拟环境尽可能与实际卡匹配。
这是我在 ATR 数据库中的卡片规格。它遵循 Java Card 2.2.2 和 Global Platform 2.1.1 规范。
我按照OpenSC GitHub 上的说明来模拟支持 vpcsd 的卡。这些说明以内置的jcardsim-3.0.4-SNAPSHOT.jar
.
如何在
jcardsim
2.2.2 版中构建支持 virtualcard/vpcsd 的版本?在构建 IsoApplet 时如何指定 Java Card 版本
ant-javacard
?我的 JDK 会影响我的选择吗?
我的环境是
我对 ant-javacard wiki 的版本控制页面有点困惑:https ://github.com/martinpaljak/ant-javacard/wiki/Version-compatibility
- 在什么情况下,我会使用 JDK 编译 .java 文件并在获取类文件时以不同的 JRE 版本为目标,以便使用转换器转换为特定的 JCDK 版本?我理解使用高 JDK 来获得更好的源代码功能,然后为特定的 JRE 进行编译,但当有针对 JCRE 的额外步骤时则不然。
smartcard - 如何与同一物理智能卡上的多个 javacard 应用程序交互(如 yubikey)
我已经在我的 2.2.2 javacard 上安装了流行的 IsoApplet ( https://github.com/philipWendland/IsoApplet ) 并且已经能够使用pkcs11-tool
andpkcs15-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
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 函数会返回成功?
cryptography - 无法将 pkcs11-tool 与自定义 hsm 角色一起使用
我正在开发具有自定义用户角色的 HSM:加密用户。我如何使用 pkcs11-tool 在 Hsm 上登录或与该用户一起工作?它适用于用户或 SO 不确定如何使用特定于 hsm 的自定义角色。
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 当我尝试使用它时,我不确定我在这里缺少什么。
设置:
- git 克隆https://github.com/OpenSC/OpenSC.git
- git checkout 30180986a08cf71fe4af4b50251a8bb5b1ab95af (0.21.0 提交正确版本)
- 手动创建构建的源文件
- nmake /f Makefile.mak
使用 VS 2019 的 x64 本机工具命令提示符为 x64 构建它。
这应该是根据指南,因为据我所知,我不需要 openpace/openssl/zlib 来编译 opensc-pkcs11。
问题总结:
- 如果我从版本https://github.com/OpenSC/OpenSC/releases版本 OpenSC-0.21.0 下载,编译后的 opensc-pkcs11.dll 按预期工作
- 如果我从基于 v0.21.0 提交的源代码编译它,我得到 0x5: CKR_GENERAL_ERROR 尝试将库用于例如 OpenSSH 时,测试其他/以前的提交也会发生这种情况,因为我怀疑我在这里遗漏了一些东西.
有没有人遇到过同样的问题?也许有一些任何人都可以分享的构建配置,所以我可以理解我在这里缺少什么?
openssl - 获取 OpenSSL 的 OpenSC PKCS11 引擎日志
我正在为 OpenSSL 使用 OpenSC 的 PKCS11 引擎。我想从 OpenSC 获取日志,也想强制登录。根据https://github.com/OpenSC/libp11/blob/master/README.md我可以使用 VERBOSE 和 FORCE_LOGIN 参数这样做,但我应该把它们放在哪里?
我试图将它们放入相应的 OpenSSL 配置部分:
但这无济于事。如何正确地将这些标志转发给 OpenSC?