安全,服务器证书和SSL连接
业务报错:
javax.net.ssl.SSLPeerUnverifiedException: Certificate for <10.5.20.137> doesn’t match any of the subject alternative names: [*.dt.zte.com.cn]
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:507)
这个异常表明服务器提供的 SSL 证书中的主体备用名称(Subject Alternative Name,简称 SAN)与客户端尝试连接的服务器的主机名或 IP 地址不匹配。
证书问题:服务器提供的 SSL 证书是为了 *.dt.zte.com.cn 这个域名或通配符域名颁发的。这意味着证书可以被用于任何以 dt.zte.com.cn 结尾的域名。
主机名不匹配:你尝试连接的服务器的 IP 地址是 <10.5.20.137>,这个 IP 地址并不匹配证书中的任何 SAN 条目。证书中的 SAN 条目是为域名设计的,而不是 IP 地址。
验证失败:由于主机名(在这个情况下是 IP 地址)与证书中的 SAN 条目不匹配,Java 的 SSL 握手过程中的主机名验证失败了,因此抛出了 SSLPeerUnverifiedException 异常。
服务器证书和SSL验证是网络安全通信的重要组成部分,它们确保了数据传输的安全性和可靠性。以下是一些关键概念和步骤,帮助你理解服务器证书和SSL验证:
1. SSL/TLS 协议
- SSL(Secure Sockets Layer) 和 TLS(Transport Layer Security) 是两个加密协议,用于在互联网通信中提供安全和数据完整性。
- SSL 现在主要被 TLS 取代,但这两个术语经常互换使用。
2. 数字证书
- 数字证书是一种电子文档,用于证明某个实体(如网站、服务器或用户)的身份,并包含公钥信息。
- 证书由可信的第三方机构(称为证书颁发机构,CA)签发。
3. 主体备用名称(SAN)
- SAN 是 X.509 证书的一个扩展,允许在单个证书中包含多个域名或IP地址。
- 这使得单个证书可以用于多个不同的主机名,提高了灵活性。
4. SSL 验证过程
- 客户端发起连接:当客户端(如浏览器)尝试与服务器建立安全连接时,
服务器会提供其SSL证书。 - 证书验证:
客户端会检查证书的有效性,包括证书是否由受信任的CA签发、证书是否过期、证书的主体名称是否与请求的主机名匹配等。 - 加密通信:如果证书验证通过,
客户端和服务器将使用证书中的公钥进行密钥交换,然后使用对称加密算法进行安全通信。
5. 处理证书错误
- 如果证书验证失败(例如,证书不是由
受信任的CA签发、证书过期、主机名不匹配等),客户端会显示安全警告。 - 在开发环境中,你可能会遇到自签名证书或未正确配置的证书,这会导致SSL验证错误。
6. 禁用 SSL 验证(不推荐)
- 在某些情况下,你可能需要禁用SSL验证以进行调试。然而,这会使应用容易受到中间人攻击,因此不推荐在生产环境中这样做。
7. 解决方案
- 确保证书正确配置:检查
服务器证书是否包含正确的主机名和SAN。 - 更新证书:如果
证书过期或需要更新,及时更新证书。 - 使用受信任的CA:确保证书由
受信任的CA签发。 - 客户端配置:在客户端正确配置SSL/TLS设置,以确保安全通信。
8. Java中的SSL验证
- 在Java应用中,你可以通过配置
SSLContext和TrustManager来自定义SSL验证行为。但请注意,禁用主机名验证会降低安全性。
// 示例:创建一个信任所有证书的 TrustManager(不推荐)
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() { return null; }public void checkClientTrusted(X509Certificate[] certs, String authType) { }public void checkServerTrusted(X509Certificate[] certs, String authType) { }}
};// 初始化 SSLContext
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
总之,正确配置和管理服务器证书以及SSL验证对于确保网络安全至关重要。始终遵循安全最佳实践,确保数据传输的安全和完整性。
相关文章:
安全,服务器证书和SSL连接
业务报错: javax.net.ssl.SSLPeerUnverifiedException: Certificate for <10.5.20.137> doesn’t match any of the subject alternative names: [*.dt.zte.com.cn] at org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSoc…...
Java结合ElasticSearch根据查询关键字,高亮显示全文数据。
由于es高亮显示机制的问题。当全文内容过多,且搜索中标又少时,就会出现高亮结果无法覆盖全文。因此需要根据需求手动替换。 1.根据es的ik分词器获取搜索词的分词结果。 es部分: //中文分词解析 post /_analyze {"analyzer":"…...
Design Compiler:Topographical Workshop Lab2
相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 本文是对Synopsys Design Compiler Topographical/Graphical Workshop Lab Guide中Lab2的翻译,Lab文件可以从以下链接获取。 Synopsys Design Co…...
【C语言】连接陷阱探秘(1):声明与定义
目录 一、声明与定义的混淆 1.1. 声明(Declaration) 1.2. 定义(Definition) 1.3. 避免混淆的方法 1.4. 示例 二、声明与定义不匹配 2.1. 常见的不匹配情况 2.2. 解决方法 三、外部变量与静态变量的命名冲突 3.1. 外部变量命名冲突 3.2. 静态变量命名冲突 四、缺…...
ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF
ChatGPT academic项目是由中科院团队基于ChatGPT专属定制。论文润色、语法检查、中英互译、代码解释等可一键搞定,堪称科研神器。 功能介绍 我们以3.5版本为例,ChatGPT学术版总共分为五个区域:输入控制区、输出对话区、基础功能区、函数插件…...
python isinstance(True, int)
今天的bug 是布尔类型给的。 >>> a True >>> isinstance(a, int) True>>> a True >>> isinstance(a, bool) TruePython中的布尔类型(bool)实际上是整数类型(int)的一个子类,…...
1.5寸**进口 128128带灰阶oled屏 spi串口 老王电子diy 设备 OLED 2024/11/15 arduino
名:1.5寸**进口 128128带灰阶oled屏 协:spi串口 铺:老王电子diy 设备: OLED 时间:2024/11/15 IDE: arduino 兜兜转转还是打通了,他的接口 用的i2c 标志 夭寿咯 MOSI(Master Out Slave In):主机输出,从机输入。MISOÿ…...
【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)
文章目录 前言一、自定义拦截器二、自定义操作1.自定义颜色2.合并单元格 三、复杂操作示例1.实体(使用了注解式样式):2.自定义拦截器3.代码4.最终效果 前言 本文简单介绍阿里的EasyExcel的复杂导出操作,包括自定义样式,根据数据合并单元格等。…...
机器学习 ---线性回归
目录 摘要: 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 (1)适用场景 (2)正规方程解的公式 三、衡量…...
深度学习每周学习总结J5(DenseNet-121 +SE 算法实战与解析 - 猴痘识别)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 0. 总结 数据导入及处理部分:本次数据导入没有使用torchvision自带的数据集,需要将原始数据进行处理包括数据导入…...
VBA学习笔记:点击单元格显示指定的列
应用场景: 表格中列数较多,特定条件下隐藏一些无关的列,只保留相关的列,使表格更加清晰。 示例:原表格如下 点击一年级,只显示一年级相关的科目: 点击二年级,只显示二年级相关的科…...
windows C#-LINQ概述
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服…...
vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)
1. 问题现象 环境: 系统:win11node:v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目,期望: App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际: App runn…...
R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
全文链接:https://tecdat.cn/?p38273 多模态数据在统计学中并不罕见,常出现在观测数据来自两个或多个潜在群体或总体的情况。混合模型常用于分析这类数据,它利用不同的组件来对数据中的不同群体或总体进行建模。本质上,混合模型是…...
C++ 关于类与对象(中篇)一篇详解!(运算符重载)
赋值运算符重载 运算符重载 C 为了 增强代码的可读性 引入了运算符重载 , 运算符重载是具有特殊函数名的函数 ,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键…...
Scala的set
//Set的特点:唯一(元素不相同);无序 case class Book(var bookName:String,var author:String,var price:Double){} object test27 {def main(args: Array[String]): Unit {//定义一个可变setval set1 scala.collection.mutable…...
Linux---常用shell脚本
目录 一.网络服务 开启network服务 网口IP配置 聚合口配置 前言 秋招拿到了科大讯飞的offer,可是由于某些原因无法完成三方签署,心情还是比较失落的,或许写一篇技术博客,活跃一下大脑思维也是一种不错的放松方式。 一.网络服务 …...
windows二进制安全零基础(二)
文章目录 栈(The Stack)调用约定(Calling Conventions)函数返回机制 在x86架构中,栈(Stack)是一个非常重要的内存区域,它用于支持线程的短期数据需求,如函数调用、局部变…...
git常用命令+搭vscode使用
1.克隆远程代码 git clone http:xxx git clone ssh:xxx clone的url 中 https和 ssh是有区别的: git中SSH和HTTP连接有什么区别-CSDN博客 当然https拉下来的代码每次pull /push都需要验证一次自己的账户和密码,可以config进行配置不用每次手敲: 解决VScode中每次git pu…...
如何在C#中处理必盈接口返回的股票数据?
在必盈接口返回股票数据后,在 C# 中可通过以下步骤进行处理: 数据获取 使用 HttpWebRequest 或 HttpClient 类向必盈接口发送请求以获取数据。以 HttpWebRequest 为例,构建请求并发送,获取响应流后读取为字符串形式的 JSON 数据。…...
Java面试高频:阿里真实面试题——Redis分布式锁实现(3分钟速通,不会直接挂)
一、真实面试场景(代入感拉满) 上周,一个候选人来面试阿里P6。 技术面已经过了两轮,表现都不错。 最后一轮,面试官只问了一个问题: “你们项目里用过Redis分布式锁吗?怎么实现的?…...
OpenClaw+Qwen3.5-4B-Claude:个人知识库自动化更新方案
OpenClawQwen3.5-4B-Claude:个人知识库自动化更新方案 1. 为什么需要自动化知识管理 作为一个每天需要处理大量技术资料的研究者,我发现自己陷入了一个困境:收藏的文章越来越多,但真正消化吸收的内容却越来越少。上周整理笔记时…...
告别SSH断连焦虑:用Tmux会话持久化拯救你的远程工作
远程开发者的救星:Tmux实战指南与高阶会话管理技巧 凌晨三点,服务器上的关键编译任务刚执行到一半,突然网络抖动导致SSH连接中断——这种令人抓狂的场景,每一位远程开发者都深有体会。传统终端会话的脆弱性让我们不得不反复重做工…...
如何让2015年前的MacBook Pro焕发新生?OpenCore Legacy Patcher完全指南
如何让2015年前的MacBook Pro焕发新生?OpenCore Legacy Patcher完全指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为手中的老款Mac无法升级到…...
上海优质seo公司推荐_上海seo公司的优势在哪里
<h3 id"seo_seo">上海优质seo公司推荐_上海seo公司的优势在哪里</h3> <p>在当今互联网营销的时代,SEO(搜索引擎优化)已经成为企业提升网站流量、品牌知名度的重要手段。特别是在经济发达的大都市上海,…...
【进阶指南】VSCode + Clang-Format:从零定制你的专属代码风格(130+配置项实战解析)
1. 为什么需要定制代码风格? 当你第一次接触代码格式化工具时,可能会觉得默认配置已经足够好用。但当你参与过几个团队项目后,就会发现统一的代码风格有多重要。我曾经接手过一个遗留项目,里面混杂着五种不同的缩进风格——有用制…...
Kubernetes 自动扩缩容最佳实践
Kubernetes 自动扩缩容最佳实践 一、前言 哥们,别整那些花里胡哨的。Kubernetes 自动扩缩容是保证应用高可用和成本优化的关键,今天直接上硬货,教你如何配置和优化自动扩缩容。 二、扩缩容类型对比 类型适用场景优势劣势HPA水平扩缩容响应…...
Transformer解码器实战:用PyTorch手写Masked Self-Attention(附避坑指南)
Transformer解码器实战:用PyTorch手写Masked Self-Attention(附避坑指南) 1. 为什么需要Masked Self-Attention 在文本生成任务中,模型需要遵循自回归特性——即生成当前词时只能依赖已生成的词。想象你正在玩文字接龙游戏&#x…...
RStudio Server部署与运维实战:从零搭建到高效管理
1. 环境准备:搭建RStudio Server的基石 在开始部署RStudio Server之前,我们需要确保服务器环境已经准备就绪。就像盖房子需要打地基一样,这一步决定了后续所有工作的稳定性。我遇到过不少因为环境问题导致的安装失败案例,大多数都…...
PX4无人机开发实战:5个关键ROS话题的订阅与发布详解(附代码示例)
PX4无人机开发实战:5个关键ROS话题的订阅与发布详解(附代码示例) 当你在PX4无人机开发中首次接触ROS通信时,可能会被各种话题和服务搞得晕头转向。作为连接飞控与外部系统的桥梁,这些通信接口直接决定了无人机的可控性…...
