`
lao_lee
  • 浏览: 97106 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

支持基于X509 V3客户端证书(IdP的认证手段)的Information Card

阅读更多
声明: 本文所有code除摘自网络的已注明出处外,都是本人在个人时间进行练习的代码,系本人个人书写,没有copy自任何出处, 也与IBM, Eclipse, 以及任何其他组织无关,本人也不对其主张任何权利.

其实很简单,这种卡里包含了一张客户端证书的thumb-print,需要根据这个指纹从证书库里搜索到对应的证书和私钥. 下面这张图:

是一张卡的文本内容,可以看到证书信息.[注:所谓thumb-print是微软创造的一个名字,实际上就是把一张X509证书导出为DER编码文件之后做一个SHA摘要.]

首先是怎样获得这样的一张卡,可以从微软公布的测试站点得到:
https://ipsts.federatedidentity.net/MgmtConsole/TestAccount.aspx?cardtype=x509Card

从上面这个网站可以得到一个测试用的客户端证书,是一个PFX格式的文件. Google一下,我找到了怎样从PFX文件中得到有用的东西并导入Java世界中:
http://dev2dev.bea.com.cn/techdoc/20061103894.html

这篇文章提供了一个方法,通过openSSL提供的工具把PFX文件转成PEM文件,再从PEM文件里把私钥和公钥用不同的命令导入到JKS文件中,这样就可以在Java程序中使用了.

于是又开始google可以在Windows上安装的openSSL.人类没有了Google可怎么办?!!
http://www.slproweb.com/products/Win32OpenSSL.html

使用这个命令:
openssl pkcs12 -in MYCERTS.pfx -out MYCERTS.pem -nodes
把PFX转换成了可以看懂的PEM文本文件(BASE64编码),这样我找到了证书和私钥.

证书可以很容易导入到JKS文件中,问题是java的keytool不能把私钥导入,这时我又找到了一个实用工具类ImportKey (注:代码拷贝自下面的站点:http://www.agentbob.info/agentbob/79-AB.html)

        try {
            // initializing and clearing keystore 
            KeyStore ks = KeyStore.getInstance("JKS", "SUN");
            ks.load( null , keypass.toCharArray());
            System.out.println("Using keystore-file : "+keystorename);
            ks.store(new FileOutputStream ( keystorename  ),
                    keypass.toCharArray());
            ks.load(new FileInputStream ( keystorename ),
                    keypass.toCharArray());

            // loading Key
            InputStream fl = fullStream (keyfile);
            byte[] key = new byte[fl.available()];
            KeyFactory kf = KeyFactory.getInstance("RSA");
            fl.read ( key, 0, fl.available() );
            fl.close();
            PKCS8EncodedKeySpec keysp = new PKCS8EncodedKeySpec ( key );
            PrivateKey ff = kf.generatePrivate (keysp);

            // loading CertificateChain
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            InputStream certstream = fullStream (certfile);

            Collection c = cf.generateCertificates(certstream) ;
            Certificate[] certs = new Certificate[c.toArray().length];

            if (c.size() == 1) {
                certstream = fullStream (certfile);
                System.out.println("One certificate, no chain.");
                Certificate cert = cf.generateCertificate(certstream) ;
                certs[0] = cert;
            } else {
                System.out.println("Certificate chain length: "+c.size());
                certs = (Certificate[])c.toArray();
            }

            // storing keystore
            ks.setKeyEntry(defaultalias, ff, keypass.toCharArray(), certs );
            System.out.println ("Key and certificate stored.");
            System.out.println ("Alias:"+defaultalias+"  Password:"+keypass);
            ks.store(new FileOutputStream ( keystorename ), keypass.toCharArray());
        } catch (Exception ex) {
            ex.printStackTrace();
        }


接下来遇到的问题是: 微软的Web service provider只接受application/soap+xml的Content-Type, 而AXIS-1.4发送的消息类型是text/xml...

22日与Mike聊天,问题很多: 微软的provider只支持SOAP 1.2,而Higgins STS目前的状态是SOAP 1.1的,留待Mike老兄处理了.我先把上层应用部分的code提交到Eclipse了.

25日, OK, Mike老兄发信声称他已经把STS部分的代码搞定了,可以check out出来一试究竟. 目前SVN中code是可以用于Wag IdP的(wag.bandit-project.org),但是微软的还不行,他们只支持SOAP 1.2, 我们只支持SOAP 1.1~~~
分享到:
评论

相关推荐

    Iphone 非IDP万能证书

    【Iphone非IDP万能证书】是一种在iOS设备上用于开发和测试应用程序的特殊证书类型,它允许开发者在没有通过Apple的官方Developer Program(IDP,即苹果开发者计划)的情况下,安装和运行未经过App Store审核的应用。...

    SSO单点登录客户端

    IDP负责用户的认证,SP是应用系统,客户端是用户使用的设备或软件。在SSO过程中,客户端向SP发起请求,SP引导客户端到IDP进行身份验证,验证完成后,IDP返回一个安全令牌给SP,SP依据此令牌确认用户的身份并提供服务...

    CMMI-IDP支持过程

    CMMI-IDP支持过程是集成化软件研发流程的一个关键组成部分,它涵盖了多个方面,旨在确保软件开发的质量、效率和可追溯性。本章主要讨论了软件配置管理、文档管理、软件质量管理、客户服务管理和统计分析这五个核心...

    shibboleth-tomcat-dta-ssl:JSSE 实现可插入到 Tomcat servlet 容器中,以支持基于 SOAP 通道的 Shibboleth IdP 自定义客户端证书 SSL 处理

    shibboleth-tomcat-dta-ssl 该项目是作为 Unicon一部分开发的。 提供此模块的专业支持... Tomcat servlet 容器的多个版本的简单 JSSE 实现,需要客户端证书身份验证,但将证书的所有信任验证委托给接收请求的应用程序。

    基于Java的源码-OpenID的客户端 JOpenID.zip

    本篇文章将深入探讨基于Java的OpenID客户端库JOpenID的相关知识点。 首先,了解OpenID的基本原理至关重要。OpenID的核心概念是分散式身份验证,用户可以在任何支持OpenID的提供商处注册一个唯一的标识,然后在使用...

    Xcode 4.1_4.2 免证书(iDP)开发+真机调试+生成IPA全攻略.pdf

    Xcode 免证书(iDP)开发+真机调试+生成IPA全攻略 Xcode 是苹果公司开发的一款集成开发环境(IDE),广泛应用于 iOS 和 Mac OS X 开发。然而,在 Xcode 上开发的程序只能在模拟器中运行,要想将程序放到真机上则要...

    saml-idp-源码.rar

    4. 单点登录(Single Sign-On, SSO):SAML IDP支持SSO,允许用户在一次登录后访问多个服务提供商的应用程序,而无需再次输入凭证。 5. 联邦管理:SAML IDP可以与多个服务提供商建立信任关系,管理这些关系并决定...

    IDS,IPS,IDP对比

    随着网络攻击手段的不断进化,IDS、IPS和IDP也在不断发展和完善。未来的趋势可能包括: - **智能化分析**:利用机器学习和人工智能技术提高威胁检测的准确性和效率。 - **集成解决方案**:将多种安全工具整合在一个...

    idp680_guid

    由于文件标题、描述以及部分内容均使用了相同的关键词“idp680_guid”,这表明文档的核心内容集中在IDP-680这一型号上,而IDP-690可能是与其相关的另一个产品型号。 ### 1. IDP-680/IDP-690 硬件指南简介 #### ...

    SSO示例_包含sp和idp

    这个示例中的sp和idp目录可能包含了实现这些步骤的代码、配置文件、证书等,这对于理解和学习SSO的实现过程非常有帮助。开发者可以通过研究这些文件来了解如何配置和集成SSO系统,以及如何处理SAML令牌交换。 总的...

    sp-idp-help

    - SP接收来自IDP的认证信息,并基于此决定是否允许用户访问。 - SP需要配置以信任特定的IDP,并正确解析接收到的身份验证令牌。 **单点登录(SSO)的工作原理**: 1. 用户尝试访问SP。 2. SP发现用户未认证,重定向...

    基于Java的OpenID的客户端 JOpenID.zip

    JOpenID是一个Java实现的OpenID客户端库,它使Java开发者能够轻松地在自己的应用程序中集成OpenID支持。 **OpenID基本原理** OpenID的工作原理是,用户拥有一个OpenID标识符,通常是一个URL,这个URL指向提供身份...

    Juniper_IDP(模块)配置手册及实例

    ### Juniper IDP(模块)配置手册及实例 #### 一、IDP的初始化设置 在Juniper IDP系统的配置过程中,初始化设置是至关重要的第一步。这部分内容将详细介绍如何进行IDP传感器(Sensor)的初始化配置,包括但不限于...

    OpenSaml使用引导,及测试IDP,SP源码

    通常,你会在配置文件中指定密钥存储的位置,如JKS(Java Key Store)或PKCS12格式的证书。 **2. 断言信息签名** 签名SAML断言是为了验证信息来源的真实性,防止中间人攻击。OpenSAML提供了一个SignatureBuilder类...

    saml-idp:节点的简单SAML身份提供程序(IdP)

    介绍此应用程序提供了一个简单的SAML身份提供程序(IdP),以使用或单一注销配置... 您可以使用以下命令生成密钥对(在路径中需要openssl): openssl req -x509 -new -newkey rsa:2048 -nodes -subj ' /C=US/ST=Califo

    基于python的统一身份认证授权管理解决方案,支持多种标准协议(LDAP, OAuth2, SAML, OpenID)

    基于Python的统一身份认证授权管理系统提供了一种高效、安全的解决方案,它能够支持多种业界标准协议,如LDAP(轻量目录访问协议)、OAuth2、SAML(Security Assertion Markup Language)以及OpenID。这些协议在不同...

    idp.rar_IDP

    描述提到“Support for the Vibren PXA255 IDP requires rev04 or later IDP hardware”,这表明为了正确支持Vibren PXA255的IDP功能,用户需要具有版本号为04或更新的IDP硬件。这可能意味着之前的硬件版本存在不...

    Shibboleth与CALIS统一认证云服务中心的跨域认证集成模式.pdf

    CARSI(China Academic Library & Information System)是高校身份认证联盟,它与中国高等教育文献保障系统(CALIS)和数字资源授权联盟(DRAA)合作,推出了基于Shibboleth的跨域身份认证服务。该联盟的目的是为了...

    JNCIA-IDP 硬件 路由器

    IDP系列设备作为Juniper Networks入侵检测与防御系统的核心部分,为保障网络的安全提供了强有力的支持。特别是IDP75安装指南的详细说明,对于用户正确安装和使用该设备具有重要意义。此外,文档中列出的各项版权信息...

    unicon-shibboleth-idp-v3-template:Shibboleth 身份提供程序 v3 安装程序模板

    对 TestShib 元数据的内置配置支持Idp 会话生存期从默认的 30 分钟更改为(这可以在idp.properties轻松更改)。 上一个会话处理程序已关闭(还没找到) 默认情况下,日志级别更改为DEBUG 属性解析、登录处理程序等...

Global site tag (gtag.js) - Google Analytics