java - SSLHandshakeException 证书不匹配任何主题替代名称
问题描述
我正在尝试通过 JAAS 将应用程序身份验证从 LDAP(工作正常)切换到 LDAPS。该应用程序在 JVM 上运行。我遵循了供应商操作指南(Rundeck - jaas LDAPS 配置问题),但我遇到了问题。
从日志:
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: javax.net.ssl.SSLPeerUnverifiedException: Certificate for <ActiveDirectoryIP> doesn't match any of the subject alternative names: <ActiveDirectoryFQDN>
我注意到 DNS 中的 ActiveDirectoryFQDN 是小写的,但在从 openssl s_client 命令导入的 cert/pem 中是大写的。SSL 证书不应该区分大小写,但也许 Java 会以其他方式处理它?作为一种解决方法,我尝试在 /etc/hosts 中为 ActiveDirectoryFQDN 添加大写条目,并将 /etc/nsswitch 修改为:
hosts: files [success=return] dns
但没有喜悦。我无法修改 DNS。
是否有理由忽略 SSLHandshakeException 错误和/或通常禁用 JVM 的 SSL 验证(通过 OPTS)?
解决方案
不知道为什么我之前没有考虑过 - 解决方案非常简单:只需在应用程序配置中替换<ActiveDirectoryIP>
为<ActiveDirectoryFQDN>
仅针对 AD FQDN 颁发的 AD 证书(IP 没有 alt)。
推荐阅读
- timer - 关于计时器 - 使用 Microsoft Bot Framework v4 开发了一个机器人
- javascript - 如何在一个组件中拥有一个通用功能,并在事件发出时在另一个组件中使用它?
- css - 如何在 Angular 中使用 ngFor 从 JSON 数组构造单个字符串
- android - 如何隐藏recyclerview适配器中的第一个参数?
- powershell - 通过 AZURE realse 管道更新配置文件中的多个连接字符串
- dart - 是否可以将项目添加到 Dart 流中包含的列表中?
- mongodb - 如何查询 mongodb 以根据值嵌套参数获取结果?
- multiprocessing - 多个函数调用循环内的并行处理
- python-3.x - TypeError: only() 接受 2 个位置参数,但给出了 3 个
- css - 从类中反应选择样式