Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缺陷Java检索到私钥并使用错误的智能卡签名_Java_Security_Cryptography_Digital Signature - Fatal编程技术网

缺陷Java检索到私钥并使用错误的智能卡签名

缺陷Java检索到私钥并使用错误的智能卡签名,java,security,cryptography,digital-signature,Java,Security,Cryptography,Digital Signature,我试图用Java密钥库对一些数据进行签名,我能够检索到证书,并据说从密钥库中抓取了私钥,但是当我尝试签名时,我故意在读卡器中放入了错误的卡,它提示输入PIN,我输入了错误卡的PIN,而且它还是签了名。。。wtf 假设我有两张智能卡,比如说MyTestAlias和MyErrorCardAlias,我抓取了MyTestAlias的私钥,但是我插入了有MyErrorCardAlias的卡,下面的代码无论如何“工作”,但它不应该工作!这毫无意义 KeyStore ks = KeyStore.getIns

我试图用Java密钥库对一些数据进行签名,我能够检索到证书,并据说从密钥库中抓取了
私钥
,但是当我尝试签名时,我故意在读卡器中放入了错误的卡,它提示输入PIN,我输入了错误卡的PIN,而且它还是签了名。。。wtf

假设我有两张智能卡,比如说
MyTestAlias
MyErrorCardAlias
,我抓取了
MyTestAlias
的私钥,但是我插入了有
MyErrorCardAlias
的卡,下面的代码无论如何“工作”,但它不应该工作!这毫无意义

KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null);

Signature rsa = Signature.getInstance("SHA256withRSA");
rsa.initSign(ks.getKey("MyTestAlias"));
rsa.update("Hello world".getBytes());

// this prompt for pin of the incorrect card, 
// but if you entered the correct pin for that card, 
// it would still sign it.
byte[] signedData = rsa.sign();

我认为这不是Java的问题。它看起来像是一个卡驱动程序错误,当它被提取时,应该会终止连接。我偶尔看到过。有更多的信息吗?找到你在哪里看到的链接了吗?我想比较一下,看看它是否相关,或者我是否可以排除故障。我不能给你更多的信息,前一段时间在一个项目中,我们观察到了一个制造商的卡片,我们观察到了相同的行为。对于其他卡,这并没有发生。这看起来更像是CMS实现问题,或者是底层PKCS#11库(如果有)中的问题,或者是驱动程序/证书缓存实现问题。Java并没有真正管理对实际密钥/证书的引用,而且极不可能突然指向不同的证书/密钥。所以我同意pedrofb的观点,这不是Java中的问题(或者至少不太可能),我认为这不是Java的问题。它看起来像是一个卡驱动程序错误,当它被提取时,应该会终止连接。我偶尔看到过。有更多的信息吗?找到你在哪里看到的链接了吗?我想比较一下,看看它是否相关,或者我是否可以排除故障。我不能给你更多的信息,前一段时间在一个项目中,我们观察到了一个制造商的卡片,我们观察到了相同的行为。对于其他卡,这并没有发生。这看起来更像是CMS实现问题,或者是底层PKCS#11库(如果有)中的问题,或者是驱动程序/证书缓存实现问题。Java并没有真正管理对实际密钥/证书的引用,而且极不可能突然指向不同的证书/密钥。因此,我同意pedrofb的观点,即Java中不存在这种情况(或者至少不太可能)。