贫民窟里的程序高手

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这次项目的SAML2被要求加入了x509证书认证,真的是巨坑,网上都没有系统说明的资料。

首先,用openssl生成x509的证书,然后把证书文本放在要导入服务器的xml中,这里就有两个坑:

  1. 生成证书的时候密码一定要是6位的,因为openssl生成证书的时候密码可以低于6位,但是keytool不让!,你用Java程序使用SAML的时候,大部分框架是需要提供jks格式的证书文件的,你在把openssl生成的证书转成jks的时候,密码就要改成6位了,这时你已经导入到服务器上了,就凉了!
  2. 我因为密码只使用了4位,所以被迫使用框架 java-saml,因为这个框架可以把证书内容用文本的格式写在配置文件上!其他的都扑街,4位密码导致我无法生成jks,那pac4j和opensaml这两个都用不了了,所以只能用java-saml。

然后,这里有个重要的概念,就是你发给idp(统一认证服务器)端的xml配置文件里会有一段x509的证书文本,同时idp端反馈给你的xml配置文件中也有一段x509的配置文本。这个本来很好理解,双方握手嘛。但是!咋用啊,谁用谁啊?这里就要注意了,sp(你的应用程序)端向idp端发送请求的时候,是要用你提供给idp的xml文件里的证书文本的,而不是idp反馈给你的xml文件里的证书文本。同理,idp返回给你的信息里的是它提供给你的证书文本,这个感觉反了,但是人家就是这么用的,咱也不敢问。

 

在使用java-saml这个框架的时候,初始化Auth()这个方法有时会报配置项缺失的错误,莫慌,根据异常点进源码里看看就可以了。因为网上的一些实例很不负责任,配置文件写的都不对,所以最好还是自己点进去看看,正确的配置项key应该是什么,就OK了。比如 onlogin.saml2.idp.entityid,网上就写成了 onlogin.saml2.IDP.entityid。这样运行的时候就会报这个配置项缺失,你说恶心不。

posted on 2021-06-18 13:56  贫民窟里的程序高手  阅读(394)  评论(0编辑  收藏  举报