前言:曾经听别人说生成证书时能够用IP地址。今天用样例证实了下用IP地址是不行的。

情景一:

生成证书时指定的名称为IP地址

样例是做单点登录时的样例。web.xml中配置例如以下:

<!--该过滤器负责用户的认证工作。必须启用它 --><filter><filter-name>CASFilter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://172.18.113.78:8443/CasServer/login</param-value><!--这里的server是服务端的IP --></init-param><init-param><param-name>serverName</param-name><param-value>http://127.0.0.1:8080/</param-value></init-param></filter><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern</filter-mapping><!-- 该过滤器负责对Ticket的校验工作。必须启用它 --><!-- ValidationFilter 这个filter负责对请求參数ticket进行验证(ticket參数是负责子系统与CAS进行验证交互的凭证)casServerUrlPrefix:CAS服务訪问地址serverName:当前应用所在的主机名 --><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://172.18.113.78:8443/CasServer</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://127.0.0.1:8080</param-value></init-param><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

如上配置中指定使用HTTPS协议,生成证书时指定的名称为上图中的172.18.113.78,訪问后出错,结果例如以下:

严重: Servlet.service() for servlet [jsp] in context with path [/uum] threw exception
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names presentat org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:341)at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:116)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at fi.common.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:125)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)at java.lang.Thread.run(Thread.java:619)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names presentat com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:415)at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1026)at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:328)... 30 more
Caused by: java.security.cert.CertificateException: No subject alternative names presentat sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)at sun.security.util.HostnameChecker.match(HostnameChecker.java:75)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:264)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)... 42 more

情景二:

生成证书时指定名称为域名(測试用的,改动了本地host文件)

样例同情景一中的样例,仅仅是把web.xml中的IP地址改为了域名,測试结果为通过。

假设client訪问出现例如以下错误:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这样的错误往往是证书路径不正确导致的。

可能原因一:tomcat使用的jdk和证书导入的jdk不是同一个

可能原因二:导入完毕后须要重新启动(静态导入),重新启动一次不行建议重新启动第二次

可能原因三:jdk中的证书导入错误

结论

所以得出结论,生成证书时须要指定域名而非用IP地址。

SSL 中证书能否够使用IP而不是域名相关推荐

  1. SSL/TLS协议详解(中)——证书颁发机构

    SSL/TLS协议详解(中)--证书颁发机构 本文翻译自:https://www.wst.space/ssl-part-3-certificate-authority/ 上一篇中,我们讨论了关于Dif ...

  2. SSL数字证书需要独立IP吗?

    听说过在站点上安装SSL数字证书是很重要的事吗?或者,知道那些销售商品或者处理敏感的访问者信息的站点需要SSL保护站点吗?无论是何目的,向站点添加SSL证书几乎成了必要事项.但如何安装SSL证书呢?对 ...

  3. SSL中,公钥、私钥、证书(pem、crt、cer、key、csr)的后缀名都是些啥?

    今天做这么一个事, centos服务器,tomcat8+nginx1.6,现在要在上面运行cas4.0. 所以需要配ssl, 然后找教程,了解到,需要把tomcat和nginx的ssl都配置好. 到这 ...

  4. SSL中,公钥、私钥、证书的后缀名都是些啥?

    今天做这么一个事, centos服务器,tomcat8+nginx1.6,现在要在上面运行cas4.0. 所以需要配ssl, 然后找教程,了解到,需要把tomcat和nginx的ssl都配置好. 到这 ...

  5. 【苹果群发】iMessage苹果推字符串访问权限,而我们在SSL推杆证书中的步骤相同

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  6. 什么是SSL安全证书?

    它是Netscape公司提出的基于WEB应用的安全套接层协议,它指定了一种在应用程序协议和TCPflP协议间提供数据安全性分层的机制,但常用于安全WEB应用的HTTP协议. 功能 通俗点说SSL证书可 ...

  7. SSL数字证书(二)使用makecert.exe签发证书

    数字证书原理(〇)认识SSL SSL数字证书(一)CA.根证书与数字证书 SSL数字证书(二)使用makecert.exe签发证书 SSL数字证书(三)使用 openssl 生成证书 首先放出几个参考 ...

  8. 浅谈https\ssl\数字证书

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本 ...

  9. Java Web学习总结(31)——全站HTTPS化SSL免费证书使用

    1 背景 谷歌从 2017 年起,Chrome 浏览器将也会把采用 HTTP 协议的网站标记为「不安全」网站:苹果从 2017 年 iOS App 将强制使用 HTTPS:在国内热火朝天的小程序也要求 ...

最新文章

  1. [HDOJ4006]The kth great number
  2. 常用几种数据库连接字符串
  3. python3.6 mysql 教程_Python3.6与MySQL建立连接
  4. [故障公告]14:40-15:00博客站点web服务器雪崩似的CPU 100%
  5. 【网络通信与信息安全】之深入解析进程之间的通信方式
  6. HDU - 6071 Lazy Running 同余最短路 + 分层
  7. 一个致命的 Redis 命令,导致公司损失 400 万
  8. 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
  9. nginx网关--openresty
  10. idea中如何查看一个类的方法被那些类调用了,显示方法对应的调用树
  11. HTTP协议的请求协议(个人笔记看不懂的地方可以和我交流)
  12. 北京大学公开课重磅来袭!欢迎走进「AI for Science」课堂
  13. sharepoint文件夹本地同步_DIY游戏云存档 - 单机游戏存档多机异地同步方案
  14. 永恒python+6_永恒中心 – Eternal Center
  15. arduino使用oled代码_Arduino指纹传感器模块使用方法(FPM10A)
  16. 关于颜色HSL(色度、饱和度、亮度)
  17. The 4th SMUCTF Office WriteUp
  18. MIT一牛人对数学在机器学习中的作用给的评述
  19. 机械革命z3pro笔记本U盘重装win10系统教学
  20. 牛人网站和博客---站得高看得更远(CV类)

热门文章

  1. 处理Clob数据(转)关于oracle中大对象处理的一些方法和实例
  2. 小程序在父组件执行子组件方法,可适用于下拉刷新上拉加载之后执行子组件方法...
  3. 使用gogs搭建git私有仓库
  4. Qt 5.9.1 连 MYSQL 5.7数据库
  5. 再谈CentOS 7程序自启动
  6. ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口
  7. ubuntu iptables设置
  8. java 编写无状态代码,一种真正实现RMI无状态化的方法续:JVM源码修改步骤
  9. 大数据分析有什么难题
  10. 数据资产管理直面企业哪些痛点