java.security.ProviderException: java.security.KeyException

本机部署没问题,部署到linux服务器报错 
javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1916) 
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1874) 
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1857) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1378) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) 
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275) 
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:254) 
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:123) 
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318) 
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) 
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) 
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86) 
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)

 

一般是JDK不同厂商导致的,需要换成换成sun的jdk版本。检查linux上的是否为openjdk。

 

解决

1.更新nss

sudo yum upgrade nss

2.重启服务器

### Java `security` 包使用指南及常见问题 #### 1. **Java `security` 包概述** Java 提供了一个强大的安全框架,其中核心部分由 `java.security` 包组成。此包提供了许多用于保护应用程序的功能模块,包括但不限于加密、签名验证、消息摘要计算以及随机数生成等功能[^1]。 以下是 `java.security` 包的一些主要功能组件及其用途: - **KeyPairGenerator**: 用于生成公私钥对。 - **MessageDigest**: 计算数据的消息摘要(哈希值),支持多种算法如 SHA-256 和 MD5。 - **Signature**: 验证数字签名的有效性。 - **SecureRandom**: 提供更高质量的随机数生成器,适用于密码学场景。 这些工具广泛应用于身份认证、授权管理以及其他敏感操作的安全保障中。 #### 2. **常见异常及其解决方案** ##### (a) InvalidParameterException 当向某些方法传入非法参数时会抛出此类异常。例如,在初始化加密对象期间如果指定了不兼容或者不符合规范的要求,则可能触发它。具体表现形式如下: ```java try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { System.err.println(e.getMessage()); } ``` 为了防止这种错误发生,应该仔细查阅官方文档确认所使用的参数组合是否被支持,并严格遵循API定义的标准输入格式[^1]。 ##### (b) ProviderException 这个异常通常表明底层服务提供商出现了某种类型的内部失败或者是由于尝试执行的操作超出了当前安装的服务供应商的能力范围之外造成的。下面给出了一段可能导致该问题的例子代码片段: ```java Security.addProvider(new MyCustomProvider()); // 假设MyCustomProvider存在缺陷 AlgorithmParameters params; params = AlgorithmParameters.getInstance("DSA", "MyCustomProvider"); byte[] paramSpecBytes = new byte[]{(byte)0x02, ...}; params.init(paramSpecBytes); ``` 要解决这个问题,首先要确保所有的第三方库都是最新版本并且经过良好测试;其次就是考虑更换成更加成熟稳定的标准实现方案之一来替代有问题的那个部件[^2]。 ##### (c) NoSuchAlgorithmException 当请求特定名称的算法而JVM未能找到对应的具体实现实例的时候就会引发这样的状况。比如当我们试图获取一种不存在于任何已加载provider列表中的hash function实例时候: ```java MessageDigest md = MessageDigest.getInstance("SHA-XYZ"); // XYZ is not a valid algorithm name. ``` 为了避免这种情况的发生,开发者应当始终依赖那些已经被证明可靠有效的标准命名约定来进行编码工作,同时也可以利用反射机制动态查询可用选项作为备选措施[^3]。 #### 3. **Spring Security 结合JWT的最佳实践** 对于现代Web应用而言,采用JSON Web Tokens(JWTs)配合Spring Security框架能够有效简化跨域资源共享(CORS),增强RESTful API安全性等方面的工作流程。基本思路概括起来主要包括以下几个方面: - 利用专门设计好的工具类JwtUtil负责令牌创建与解析过程; - 创建自定义过滤器JwtAuthenticationFilter捕获进入系统的HTTP请求头信息完成初步的身份核实动作之后再把结果存放到全局共享容器SecurityContextHolder当中去以便后续逻辑层进一步判断是否有权访问目标资源; - 在配置阶段明确指出哪些URL模式不需要经历完整的身份检验手续即可直接通行(/auth/**路径下的所有内容都属于此类情况)[^4]. 另外值得注意的是为了让前端页面正常显示图片字体图标等内容还需要额外设定例外规则允许未经登录也能浏览指定文件夹内的素材[^5]: ```java @Override protected void configure(WebSecurity web){ web.ignoring().antMatchers("/static/**","/images/**","/css/**","/js/**"); } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值