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 ! 当然这是不推荐的做法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值