标签: pkcs#11

使用智能卡的SSL客户端身份验证在Java 6中工作,但在Java 7中失败

以下代码使用PKCS#11设备(智能卡)创建客户端身份验证的SSL上下文.这一切都适用于Java 6:

// Configure the SunPkcs11 provider
String pkcs11config;
pkcs11config = "name = Cryptoki";
pkcs11config += "\nlibrary = /SCDriver/libbit4ipki.dylib";
InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
SunPKCS11 sunpkcs11 = new SunPKCS11(confStream);
Security.addProvider(sunpkcs11);

// Specify keystore builder parameters for PKCS#11 keystores
Builder scBuilder = Builder.newInstance("PKCS11", sunpkcs11, new KeyStore.CallbackHandlerProtection(new PasswordRetriever()));

// Create and init KeyManagerFactory
KeyManagerFactory factory = KeyManagerFactory.getInstance("NewSunX509");
factory.init(new KeyStoreBuilderParameters(scBuilder));

// create and init ssl context
m_ssl_context = SSLContext.getInstance("TLS");
m_ssl_context.init(factory.getKeyManagers(), new TrustManager[] {new PkTrustManager()}, null);      
SSLContext.setDefault(m_ssl_context);
Run Code Online (Sandbox Code Playgroud)

PkTrustManager仅仅是和"空"类,服用任何服务器/客户端证书为好,并PasswordRetriever刚刚经历一个对话框,询问密码(要求我发布这些源代码).在Java 7上,我在ssl上下文的SSL握手期间得到以下异常:

java.security.InvalidKeyException: …
Run Code Online (Sandbox Code Playgroud)

authentication ssl smartcard pkcs#11 java-7

7
推荐指数
1
解决办法
4642
查看次数

如何使用带有 python 的智能卡发出 TLS 请求?

我尝试使用 python 库“请求”与受智能卡保护的网站进行通信。这意味着 SSL 中的强身份验证:您必须提供客户端证书(证书和私钥)。

由于我使用的是智能卡,因此无法读取作为正常保护的私钥(仅模数)。我可以使用 python 库 PyKCS11 读取智能卡:一旦给出密码,所有证书、公钥和私钥模数。

如何混合请求和 PyKCS11 ?
如何使用智能卡中的客户端证书发出 SSL 请求?

编辑 2017/08/04

在我的 Mac 上:

  • 酿造安装openssl
  • 酿造安装opensc
  • 酿造安装engine_pkcs11
  • openssl
    • 引擎动态 -pre SO_PATH:/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/ (我特定的 Pkcs11 库)。dylib
      • 已加载:(pkcs11) pkcs11 引擎
    • s_client -engine pkcs11 -key '(slot):(id)' -keyform engine -cert 'pem.cer' -connect (host):443 -state -debug
      • SSL 握手正常

我现在的问题是 pyOpenSSl 在 API 中没有选择引擎的功能(如 pkcs11)。所以我被阻止了。我不能使用蟒蛇。

python ssl pkcs#11 python-requests

7
推荐指数
1
解决办法
2633
查看次数

PKCS11Interop Hash with SHA256 和 Sign with RSA 分两步

我有两个应用程序,一个计算文档的 SHA-256 哈希,另一个计算 RSA 签名。尝试不同的事情我得出的结论是,制作CKM_SHA256然后制作CKM_RSA_PKCS给出的结果与仅仅制作CKM_SHA256_RSA_PKCS文档本身不同。

所以我的问题是,这两种实现有什么区别?什么信息被添加到哈希CKM_SHA256_RSA_PKCS机制中以产生完全不同的签名?

rsa sha pkcs#11 pkcs11interop

7
推荐指数
1
解决办法
1090
查看次数

PKCS#11生成AES密钥

嘿,问题不是关于Ncryptoki,但我不知道其他地方要问..所以如果有人可以帮助请帮助我.我试着生成AES密钥,然后是我现在拥有的代码:

CK_MECHANISM keyGenMech = new CK_MECHANISM(CKM.AES_KEY_GEN);

CK_ATTRIBUTE[] template =
{
    new CK_ATTRIBUTE(CKA.CLASS, CKO.SECRET_KEY),
    new CK_ATTRIBUTE(CKA.TOKEN, CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.SENSITIVE, CK_BBOOL.TRUE),
    new CK_ATTRIBUTE(CKA.VALUE_LEN, 32),
    new CK_ATTRIBUTE(CKA.KEY_TYPE, CKK.AES),
    new CK_ATTRIBUTE(CKA.LABEL, "testAES".getBytes()),
    new CK_ATTRIBUTE(CKA.PRIVATE, new CK_BBOOL(bPrivate))
};
CryptokiEx.C_GenerateKey(session, keyGenMech, template, template.length, wrappingKey);
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

C_GenerateKey rv=0x62 - key size range
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些想法从这里去解决这个问题..

编辑:只是为了信息 - 我有SafeNet HSM和即时通讯使用Java PKCS#11包装,称为jprovSafeNet ProtectToolkit附带.

cryptography pkcs#11 hsm

6
推荐指数
1
解决办法
4859
查看次数

从Delphi访问Mozilla证书

我想从Delphi(XE)应用程序访问存储在Mozilla产品(Firefox和Thunderbird)中的证书.首先,我想列出它们,接下来能够管理它们(导入,导出,删除)并使用它们(符号)会很好.尽管使用mozilla支持的所有令牌,软件令牌就足够了.

到目前为止,我尝试使用XPCOM与http://d-gecko.svn.sourceforge.net/viewvc/d-gecko/trunk/ delphi绑定.然而,周围没有太多的文档,我有点混淆所有的术语和概念.我能管理的最好的是:

    var ns:nsIX509CertDB;
      servMgr:nsIServiceManager;
      p:Pchar;
    begin
      GRE_Startup;
      NS_GetServiceManager(servmgr);
      servMgr.GetServiceByContractID('@mozilla.org/security/x509certdb;1',NS_IX509CERTDB_IID,ns);
      ns.FindCertNicknames(nil,1,count,p);
      GRE_Shutdown;
    end;
Run Code Online (Sandbox Code Playgroud)

使用此代码,我确实获得了certdb对象的实例,并且我可以向它请求证书.但是它似乎是完全空的(来自FindCertNicknames的计数为0)并且它也不会对更改OCSP做出反应(IsOcspOn总是返回true).我想我创建了新的certstore,或者我需要以某种方式激活默认用户配置文件.

我也尝试访问softokn.dll作为PKCS#11库.由于这似乎有某种PKCS#11 API,因此响应不佳.即C_Inititialize上的CKR_BAD_ARGUMENTS.

最后也是非常糟糕的方式是直接访问证书文件,因为它应该是"标准"NSS,但我真的不喜欢这种方式.

delphi mozilla xpcom pkcs#11 x509certificate

6
推荐指数
1
解决办法
795
查看次数

PKCS#11中的签名证书

要在OpenSSL中签署证书,我X509_sign()通过向请求(as X509_REQ*),签名密钥和摘要提供函数来使用函数.

现在我的签名密钥存储在HSM中,因此我无法提取它来签署证书.不幸的是,PKCS#11没有提供相当于X509_sign().它拥有的是C_Sign() / C_SignUpdate() / C_SignFinal()一系列功能,它们对原始数据进行操作,而不是对证书进​​行操作.

有人可以帮助我使用示例C/C++代码如何使用PKCS#11签署使用OpenSSL创建的证书吗?

openssl sign certificate csr pkcs#11

6
推荐指数
1
解决办法
2433
查看次数

HSM:打开与 HSM 的连接时出错

接收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 详细信息:

  • ProtectToolkit C 密钥管理实用程序:4.2.0(甚至尝试使用 4.3.0)
  • 制造商 : Eracom
  • 硬件版本:66.00
  • 固件版本:2.02

pkcs#11 hsm

6
推荐指数
1
解决办法
3356
查看次数

如何使用 pkcs11-tool 创建插槽?

我正在尝试在我的应用程序中使用 pkcs11 来访问智能卡。这是“list-slots”命令的输出 -

root@penguin:~/src/tools$ pkcs11-tool -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
  (empty)
Run Code Online (Sandbox Code Playgroud)

我有 2 个问题

  1. 我如何模拟一张假卡,以便插槽 0 中有一个我可以访问的令牌/设备。

  2. 我可以创建额外的插槽并向其中添加令牌/设备吗?

如果没有,我该怎么做才能将令牌/设备添加到可用的插槽 0 中?

cryptography pkcs#11

6
推荐指数
1
解决办法
9859
查看次数

没有这样的算法:供应商 SunPKCS11 的 PKCS11-CartaoCidadao

我目前的提供商有:

0 - 提供商名称:SUN 1 - 提供商名称:SunRsaSign 2 - 提供商名称:SunEC

...

9 - 提供商名称:SunPKCS11-CartaoCidadao

第九个提供程序是我尝试使用的提供程序,它使用 pkcs11 库。

Provider prov = Security.getProvider("SunPKCS11-CartaoCidadao");
keyStore = KeyStore.getInstance("PKCS11", prov );
Run Code Online (Sandbox Code Playgroud)

使用 info 方法我可以看到它正在使用该库:

System.out.println(prov.getInfo());
Run Code Online (Sandbox Code Playgroud)

SunPKCS11-CartaoCidadao 使用库 /usr/local/lib/libpteidpkcs11.so

然而,当我尝试获取密钥实例时,它告诉我该提供程序没有 PKCS11,而它应该是这样。

KeyStore ks = KeyStore.getInstance("PKCS11","SunPKCS11-CartaoCidadao");
keyStore.load( null, null );
Run Code Online (Sandbox Code Playgroud)

java.security.KeyStoreException:未找到 PKCS11

引起原因:java.security.NoSuchAlgorithmException:没有这样的算法:提供商 SunPKCS11-CartaoCidadao 的 PKCS11

有人知道如何解决这个问题吗?

java keystore pkcs#11 java-security sunpkcs11

6
推荐指数
1
解决办法
3897
查看次数

PKCS#11。在硬件中执行 Ecryption/Decryption 的可能性

干杯。这是我关于加密堆栈交换的问题的副本。

我正在通过PKCS#11 C/Python 接口处理HSM。我想知道是否可以在硬件中做一些/ 。通过说“在硬件中”,我的意思是加密/解密而不将结果暴露给调用者空间。这主要是关于解密,因为我想调用并将结果作为任意数据保留在 HSM 中,以便稍后对该数据进行一些其他转换,并说在其他一些密钥上重新加密它。先感谢您。C_EncryptC_DecryptC_Decrypt

hardware encryption cryptography pkcs#11

6
推荐指数
1
解决办法
390
查看次数