Java 6.1 IBMJCE提供程序是否使用RSA签名生成错误的SHA256

Java 6.1 IBMJCE提供程序是否使用RSA签名生成错误的SHA256,java,encryption,websphere-6.1,Java,Encryption,Websphere 6.1,我们正在使用Java安全API生成数字签名(PKCS7)。摘要算法是SHA-256,加密算法是RSA(SHA256withRSA) 在本地计算机中使用SunRsaSign提供程序,在某些内容上生成签名。 使用WAS 8.0.0.2中的IBMJCE提供程序,我们能够在相同的内容上生成相同的签名 然而,问题是,我们必须迁移回WAS6.1。现在,生成的签名与上述两种情况下生成的签名不同。我检查了在所有3种情况下创建的消息摘要,这在所有3种情况下都是相同的,但在WAS 6.1的情况下签名是不同的 WAS

我们正在使用Java安全API生成数字签名(PKCS7)。摘要算法是SHA-256,加密算法是RSA(SHA256withRSA)

在本地计算机中使用SunRsaSign提供程序,在某些内容上生成签名。 使用WAS 8.0.0.2中的IBMJCE提供程序,我们能够在相同的内容上生成相同的签名

然而,问题是,我们必须迁移回WAS6.1。现在,生成的签名与上述两种情况下生成的签名不同。我检查了在所有3种情况下创建的消息摘要,这在所有3种情况下都是相同的,但在WAS 6.1的情况下签名是不同的


WAS 6.1的IBMJCE提供程序在SHA256withRSA加密方面是否存在任何已知问题?任何指点都将不胜感激。谢谢

真的有问题吗?据我所知,这必须适用

signature = sign(message)  
verify(signature) == message  

没有要求所有签名必须相同。那么你真的对这些签名的验证有问题吗?

我们也有同样的问题,我们强迫Websphere使用SUNJCE。以下是步骤

因此,在IBM Websphere控制台中,转到 应用程序服务器>服务器>进程定义>Java虚拟机

查找通用JVM参数并添加以下参数

-DamCryptoDescriptor.provider=SunJCE -DamKeyGenDescriptor.provider=SunJCE
然后复制

C:\JAVA\jdk1.6.0_34\jre\lib\ext\sunjce_provider.jar  

改变

C:\Program Files\IBM\SDP\runtimes\base_v7\java\jre\lib\security\java.security
通过将以下Sun提供程序添加到java.security文件中的提供程序列表中

#This will help Websphere to load 
security.provider.13=com.sun.crypto.provider.SunJCE
security.provider.14=sun.security.provider.Sun
security.provider.15=sun.security.rsa.SunRsaSign
security.provider.16=sun.security.jgss.SunProvider

希望这有帮助。

+1检查摘要的方法是相同的。您是检查了整个CMS格式还是仅检查了PKCS#1格式?你生成了什么散列?我检查了整个CMS格式(PKCS#7)。只有最后4行不同。我知道签名不同的部分是加密摘要,即签名时间之后的摘要。(我一直使用与签名时间相同的日期/时间)。我尝试使用Signature.getInstanceOf(“SHA256withRSA”、“SunRsaSign”)创建签名实例,因为问题似乎出在IBMJCE提供程序上。但是在Websphere 6.1中找不到SunRsaSign,我知道我们必须在Webshphere_home的java/jre/lib/security文件夹的java.security文件中创建SunRsaSign条目。但是我在Webshphere中根本找不到sun.security.rsa包。显然,我能够使用was 6.1.0.35生成正确的签名。早些时候是6.1.0.25。目前还不知道这是否是由于任何缺少服务器策略的错误造成的。谢谢大家
#This will help Websphere to load 
security.provider.13=com.sun.crypto.provider.SunJCE
security.provider.14=sun.security.provider.Sun
security.provider.15=sun.security.rsa.SunRsaSign
security.provider.16=sun.security.jgss.SunProvider