1

我正在尝试使用 java 1.8-64bit 为我的项目使用 softhsm。

我正在尝试使用此处给出的第一个示例 java 类Connecting to SoftHSM java code

我能够安装 softhsm softhsm2-windows installer

并且还能够使用 softhsm-util.exe 工具创建令牌。

但是当我尝试运行 java 代码时,我得到了

            Exception in thread "main" java.security.ProviderException: Initialization failed
                at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:376)
                at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103)
                at SoftHSM.main(SoftHSM.java:44)
            Caused by: java.io.IOException: The specified module could not be found.
            Z:/SOFTHSM_INSTALL/lib/softhsm2-x64.dll
                at sun.security.pkcs11.wrapper.PKCS11.connect(Native Method)
                at sun.security.pkcs11.wrapper.PKCS11.<init>(PKCS11.java:138)
                at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:151)
                at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:313)
                ... 2 more

即使文件在异常中提到的正确位置可用。

请帮助解决这个问题。

已安装更新的系统 Visual C++:

我的电脑 Win 10 中的 Visual C++

4

1 回答 1

0

TLDR:如果您想softhsm2-x64.dll从您的 JAVA 应用程序中使用,那么您需要为 Visual Studio 2015 安装 64 位版本的Visual C++ Redistributable


详细答案:您确实使用Microsoft Windows 的 SoftHSM2 安装程序安装了SoftHSM 。

该包中存在的所有可执行文件和库(包括softhsm2-util.exe)都是 32 位的(期望为softhsm2-x64.dll64 位)。

该包中存在的所有可执行文件和库(包括softhsm2-util.exe)都依赖于 Visual Studio 2015 的 32 位版本的 Visual C++ Redistributable,期望softhsm2-x64.dll它依赖于 Visual Studio 2015 的 64 位版本的 Visual C++ Redistributable。

项目网站上的README.md说:

这些包包括 32 位和 64 位版本的 PKCS#11 库,并且需要在目标系统上安装32 位和 64 位版本的Visual C++ Redistributable for Visual Studio 2015 。

安装后显示的README.txt说:

此软件包包括静态链接到 OpenSSL 1.1.0d 的 32 位和 64 位版本的 SoftHSM 2.2.0。它需要在目标系统上安装 Visual Studio 2015 的 32 位和 64 位版本的 Visual C++ Redistributable。这些可以从以下位置下载:

http://www.microsoft.com/en-us/download/details.aspx?id=48145

我的建议:为 Visual Studio 2015 安装 32 位和 64 位版本的 Visual C++ Redistributable。

于 2017-04-06T20:55:02.873 回答