类似 java -Djavax.net.debug=SSL,handshake,data,trustmanager MyApp 如何在Eclipse下运行

如何在Eclipse执行 类似 JSSE 提供的 动态 debug 追踪模式

列:

     java -Djavax.net.debug=SSL,handshake,data,trustmanager

     首先确定这是一个属于运行时 VM 的一个参数, 且该参数是 -Djavax.net.debug=SSL,handshake,data,trustmanager, 所以接下来我们就需要将该参数加入到VM的Parameters里面去

  1. click "Run" on the top menus
  2. select "Run Configuration"
  3. Switch to the "Arguments" tab on the right panel
  4. Click "Certificates" under the panle "VM parameters"
  5. Click "NEW"
  6. Enter name as "java.net.debug", then enter the value "-Djavax.net.debug=SSL,handshake,data,trustmanager" 
  7. Added the "java.net.debug" parameter into "VM parameters"
### IDEA Http 请求 `javax.net.ssl.SSLException: Unsupported or unrecognized SSL message` 错误解决方案 当遇到此错误时,表明客户端尝试通过非加密连接发起 HTTPS 请求,而服务器期望的是加密的 SSL/TLS 连接[^2]。具体原因可能是: - **HTTPS 服务配置问题**:服务器端没有正确配置 HTTPS 或者使用的证书不受信任。 - **客户端与服务器之间的证书链问题**:例如自签名证书未被信任或证书路径不正确。 - **客户端配置问题**:客户端没有正确配置 SSL 上下文或者使用了 HTTP 而不是 HTTPS 进行连接。 #### 检查并修正服务器端配置 确保服务器端已正确配置 HTTPS 并且所用证书受客户端信任。对于自签名证书,则需将其导入至客户端的信任库中。 #### 修改 IDE 配置 针对 IntelliJ IDEA 的设置调整如下: 1. 打开项目中的 `build.gradle` 文件(适用于 Gradle 构建工具),添加以下依赖项来更新 JRE 版本的安全提供程序: ```groovy dependencies { implementation 'org.bouncycastle:bcpkix-jdk15on:1.70' } ``` 2. 设置 JVM 参数以启用调试模式查看详细的 SSL 握手过程: - 编辑启动脚本,在 VM options 添加 `-Djavax.net.debug=ssl,handshake,failure` 3. 如果确实不需要安全传输层协议 (TLS),可以考虑临时切换 URL 方案为 http:// 来绕过该问题;但这仅作为测试手段而非长久之计[^3]。 4. 对于特定场景下的 API 测试,可以在代码层面忽略 SSL 验证(注意这会带来安全隐患): ```java import javax.net.ssl.*; ... // 创建默认 TrustManager 实现类实例化对象数组 TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers(){ return null; } @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {} @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {} } }; try{ // 安装所有信任管理器 SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 创建主机名验证器允许所有主机名称 HostnameVerifier allHostsValid = (hostname, session) -> true; // 安装主机名验证器 HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); }catch(Exception e){ System.out.println(e.getMessage()); } ``` 上述方法虽然能够解决问题,但从长远来看并不推荐这样做,因为这样会使应用程序暴露在潜在风险之中。最佳实践还是应该妥善处理好双方的身份认证机制以及数据交换过程中必要的安全性保障措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值