• CAS Java认证 规格严格


    如果要启用tomcat的https方式,首先要创建证书,使用的工具是jdk中的keytool ,用法不多说了,到处都有。

    使用keytool创建证书的第一个问题是:您的姓名是什么(竟然是中文的!),这时候,理所应当的是回答自己的名字。配置完成后,用浏览器访问,一切正常。但使用http client 写程序访问的时候,问题就出来了。
    一般表现形式是这样的: 

    javax.servlet.ServletException: HTTPS hostname wrong: should be <localhost>

    root cause
    java.io.IOException: HTTPS hostname wrong: should be <localhost>

    看到这个问题就能猜到是证书问题。但无论如何也猜不到证书到底有什么毛病。事实上,令人难以置信的是错误就出在创建证书的第一个问题--你的姓名。其实这个“姓名”应该是域名。比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,当然会出错。浏览器无所谓,弹出一个对话框,用户按一下就行了。但http client就直接抛出了上面那个错误。

    两篇文章的作者已经解释了出现 HTTPS hostname wrong 的原因及解决方案, 经过一番查证, 发现此异常可以用以下 hack 手段避免, 在使用 https 协议访问前, 加上以下代码 :

        System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");

        HostnameVerifier hv = new HostnameVerifier() {
             public boolean verify(String urlHostName, SSLSession session) {
             return urlHostName.equals(session.getPeerHost());
             }
        };
       
        HttpsURLConnection.setDefaultHostnameVerifier(hv);

    这样既可正常访问, 注意导入的 HostnameVerifier 和 HttpsURLConnection 的 package 都是 javax.net.ssl, 而非 com.sun.net.ssl , 如果允许所有 ip 都可以通过认证, 甚至可以在 verify 中直接返回 true ! 当然这是不推荐的做法.

  • 相关阅读:
    寒假学习记录19
    寒假学习记录18
    寒假学习记录17
    寒假学习记录16
    寒假学习记录15
    寒假学习记录14
    寒假学习记录13
    寒假学习记录12
    寒假学习记录11
    学习进度(10)
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/1892168.html
Copyright © 2020-2023  润新知