Private key cannot be used to encrypt

1 篇文章 0 订阅
1 篇文章 0 订阅

报错信息:(因为涉及到源码,只敲报错的部分)

java.security.InvalidKeyException: Private Key cannot be used to encrypt
    at com.bim.crypto.provider.RSA.engineInit(Unknown source)
    at javax.crypto.Cipher.a(Unknown source)
    at javax.crypto.Cipher.a(Unknown source)

背景:

     在使用RSA加密时,报java.security.InvalidKeyException:Private key cannot be used to encrypt,直接翻译错误就是,不能够使用私钥加密。

    奇怪的是,本地测试时没有这个问题,只有服务器才会报错,那问题就出在环境的差异上。

分析:

    本地用的是sun JDK,中间件是Tomcat,测试和生产环境使用的都是openJDK ,中间件是Websphere,可能问题就出来这里。经过仔细查看错误日志,报错包含ibm,更怀疑是中间件websphere的问题,

    经过查询,问题出在jdk上面,测试环境中间件WebSphere使用的是OPEN JDK,OPEN JDK有一个属性,-Dcom.ibm.crypto.provider.DoRSATypeChecking默认为true,私匙不能用于加密。其实OPEN JDK这么做也是可以理解,如果使用公钥加密,那么只有私钥才可以解密,这样保证了信息的安全。可如果我们用私钥加密,那么拥有公钥的都能解密,这样信息就不安全的。但我们这是使用对方提供的demo,只能使用私钥加密。

解决方法:

我们将OPEN JDK的属性,-Dcom.ibm.crypto.provider.DoRSATypeChecking 设置为false

我们在webspehre种添加 通用JVM参数-Dcom.ibm.crypto.provider.DoRSATypeChecking=fasle

Websphere设置通用JVM参数步骤:

1.登录webpshere

2、服务器-服务器类型-Websphere Application Server --应用程序服务器进入到server中

3、服务器基础结构-Java和进场管理-进程定义

4、Java虚拟机-此页可以看到通用JVM参,添加

-Dcom.ibm.crypto.provider.DoRSATypeChecking=fasle

5、应用--保存

6、重启生效

ps:内网环境无法截图,找不到的可以留言或私信

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值