首先,我是OpenSSL世界的初学者.我提前为任何基本的,野蛮的错误道歉.
考虑一个流程:
如何检查所调用的函数是否在硬件上执行?
如何验证EngineHW函数被调用?如果EngineHW没有定义该功能怎么办 - OpenSSL将回退到它拥有的任何默认引擎吗?
问题与断言质量有关 - 因为我有硬件为我做加密,我考虑使用软件回归(至少对于重要的功能).
如何将硬件安全模块加密与Java应用程序集成?我正在寻找代码样本连接到HSM,生成密钥(非对称,对称),加密和解密数据(非对称,对称)和存储密钥.
我正在尝试将openssl生成的ed25519密钥导入Yubi HSM 2,我正在按照此处描述的步骤操作:https : //developers.yubico.com/yubihsm-shell/yubihsm-wrap.html
echo -en '\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >wrap.key
Run Code Online (Sandbox Code Playgroud)
yubihsm-shell -p password -a put-wrap-key -i 20 -c all --delegated all --informat bin --in wrap.key
Run Code Online (Sandbox Code Playgroud)
openssl genpkey -algorithm Ed25519 -out ed25519key.pem
Run Code Online (Sandbox Code Playgroud)
yubihsm-wrap -a ed25519 -c sign-eddsa -d 1,2,5 --id 30 --label ED25519_Key --in ed25519key.pem --wrapkey wrap.key --out private.yhw
Run Code Online (Sandbox Code Playgroud)
yubihsm-shell -p password -a put-wrapped --wrap-id 20 --in private.yhw
Run Code Online (Sandbox Code Playgroud)
最后我的错误是 Malformed command / invalid data
似乎没有迹象表明Yubi HSM 2不支持包装ed25519密钥。
我的过程中有问题吗?还是根本不支持?
我通过以下方式初始化了SunPKCS11提供商:
Provider provider = new sun.security.pkcs11.SunPKCS11("path_to_pkcs11.cfg");
Security.addProvider(provider);
Run Code Online (Sandbox Code Playgroud)
然后我使用此提供程序初始化KeyStore以使用密钥进行密码操作.
KeyStore ks = KeyStore.getInstance("PKCS11", provider);
ks.load(null, "password".toCharArray());
Run Code Online (Sandbox Code Playgroud)
完成密码操作后,如何使用PKCS11令牌完成会话?
我试过删除提供程序,但它没有用.
Security.removeProvider("sunPCKS11ProviderName");
Run Code Online (Sandbox Code Playgroud)
下次我尝试与令牌进行通信时,我会从令牌CKR_CRYPTOKI_ALREADY_INITIALIZED中抛出此异常
更新:
我试过了
sun.security.pkcs11.SunPKCS11.logout();
Run Code Online (Sandbox Code Playgroud)
但它也没有用.
我有一个用例,我必须使用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 slot = "SLOT NUMBER";
// SUN PKCS#11 Provider -------------------------------------------
StringBuilder builder = new StringBuilder();
builder.append("name=" + name);
builder.append(System.getProperty("line.separator"));
builder.append("library=\"" + library + …
Run Code Online (Sandbox Code Playgroud) 我工作并完成了一个PKI项目,该项目使用HSM生成 - 存储密钥和执行加密功能.我使用PKCS#11与我们的sigining/verifying和加密/解密应用程序连接.我们的平台是windows.
现在,我们希望通过用软件安全模块替换HSM来提供低成本的替代解决方案.我必须在此注意,我知道不使用HSM的缺点.它是安全与成本之间的权衡.
我发现Microsoft提供了下一代CryptoAPI(CNG),密钥存储和证书服务.我的高级管理层不倾向于使用开源软件.我还发现了RSA和cryptomathic提供工具包来执行基于软件的解决方案.
有没有人遇到任何商业软件安全模块工具包来执行密钥生成,密钥存储和加密功能?
编程语言 - c/c ++
谢谢
拉吉
我经常openssl
用来生成RSA密钥和证书.但现在我遇到了一个问题.openssl x509 -req
需要私钥作为输入.但现在我们正在使用HSM来保护私钥,而我永远无法触及私钥.这样我如何生成x509证书?
如何在Linux服务器上运行的PHP应用程序中使用符合PKCS#11的HSM(例如SafeNet iKey 2032 [USB]或Aladdin eToken PRO [USB])中的密钥材料?
我的JSP程序设置为在HP-UX下的Websphere上运行.
我有一些.jar文件和一个.so文件,其中包含我的程序需要运行的类.
通过将我的.jar文件放入\MyProgram\WEB-INF\lib\
文件夹,我得到了一些工作.
但是,我看到一个UnsatisfiedLinkError
是由我的lib.so文件无法识别引起的.
我找到的方法之一是:
在管理控制台中,转到环境 - >共享库 - >新建
在.path路径中输入.jar文件位置,将.so文件位置输入到本机库路径中
在管理控制台中,转到应用程序 - >应用程序类型 - >企业应用程序
在MyProgram - >共享库引用 - >共享库映射下,通过将库从Available更改为Selected来将库分配给程序.
我有两个问题:
我可以从我的程序\lib\
文件夹中获取.jar文件和.so文件吗?
如果我不能,是否可以从我的应用程序文件夹中列出类路径和本机库路径?像上传我的application.war与websphere变量目录%MYPROGRAM%\WEB-INF\lib\lib.so
而不是将文件放在具有绝对路径的物理服务器中的东西C:\IBM\WebSphere\AppServer\bin\lib.so
?
[EDIT-01]进一步详情如下:
收到错误:"错误500:java.lang.UnsatisfiedLinkError:com.chrysalisits.crypto.LunaAPI.Initialize()V"
我试图让Websphere与LunaSA HSM接口以检索公钥/私钥.他们为我提供了:libLunaAPI.sl,libLunaAPI.so,LunaJCASP.jar,LunaJCESP.jar.从IBM的Websphere V8 - >引用 - >类加载异常,它表明我需要HP-UX的*.so文件,所以我做了相应的操作.路径集是我在Websphere中指定的绝对路径.这与我的第二个问题有关.
第一个问题是我实际上想知道我是否可以将这些文件放入myProgram.war并从那里运行,而不是使用WinSCP访问服务器并将文件放在那里进行绝对路径引用.也许指定上面提到的文件位于我的程序中,而不是\ WEB-INF\lib \.这是因为只有我的这个程序才能访问LunaSA HSM.
**PS.我尝试了两种方法,但仍然失败了.叹.
接收CKR_GENERAL_ERROR
应用程序尝试打开与 H/W HSM 的连接的时间。
详细的错误是:
50004-Crypto API could not be open.
Caused by: xxx.xxx.xxx.cryptoapi.CryptoApiSysException: Error opening session!!
Caused by: iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_GENERAL_ERROR
at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.C_Initialize(Native Method) ~[pkcs11Wrapper-1.2.18.jar:1.2.18]
at iaik.pkcs.pkcs11.Module.initialize(Module.java:307) ~[pkcs11Wrapper-1.2.18.jar:1.2.18]
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这个错误的原因是什么?该应用程序可与软件 HSM 配合使用。
硬件 HSM 详细信息:
我们将使用 AWS CloudHSM 服务来确保所有代码签名证书的安全并在我们的构建服务器上执行代码签名。我们的构建服务器是 Windows Server 2010,所以我在那里安装了 AWS CloudHSM 客户端。我激活了集群,所有命令行工具都按预期工作:我可以登录、添加密钥、查找密钥等。我们想继续使用 signtool 来签署我们的二进制文件,所以我认为我们可以使用密钥存储提供程序 (KSP)对于 AWS CloudHSM,与其他工具一起安装。
Cavium KSP 和 CNG 提供程序已成功安装,并且在 Windows 加密提供程序的列表中可见。我在这里定义了环境变量(https://docs.aws.amazon.com/cloudhsm/latest/userguide/ksp-library-prereq.html)。
我通过 certutil 添加了证书到 HSM 存储:
Certutil -CSP "Cavium Key Storage Provider" -user -importPFX "certificate.pfx"
SDK Version: 2.03
Enter PFX password:
Certificate "myCertificate" added to store.
CertUtil: -importPFX command completed successfully.
Run Code Online (Sandbox Code Playgroud)
证书已成功添加,当我从 key_mgmt_util.exe 控制台执行 findKey 命令时出现。
之后,我尝试使用证书对二进制文件进行签名,如https://docs.microsoft.com/en-us/windows-hardware/test/hlk/user/hlk-signing-with-an-hsm 中所述:
signtool_64 sign /n myCertificate "test.exe"
Run Code Online (Sandbox Code Playgroud)
或者
signtool sign /sha1 4F555EF9FAB8E86A2F84ACF325362A29FB64AF66 "test.exe"
Run Code Online (Sandbox Code Playgroud)
但我遇到了一个无法解决的错误
SDK Version: 2.03
Done Adding …
Run Code Online (Sandbox Code Playgroud) hsm ×10
java ×3
openssl ×3
pkcs#11 ×3
cryptography ×2
encryption ×2
security ×2
certificate ×1
code-signing ×1
ed25519 ×1
jsp ×1
linux ×1
php ×1
signtool ×1
usb ×1
websphere ×1
yubico ×1