标签: picketlink

验证没有中间证书的签名

是否可以验证仅在层次结构中具有祖先或根证书的签名?

免责声明:我是证书处理的新手,所以请原谅天真的术语.

考虑以下情况.

  • 我们有两方(让我们称之为身份提供商的IdP和服务提供商的SP)和一些中央证书颁发机构CA,它肯定是IdP和SP都信任的.
  • CA拥有IdP和SP都知道的证书CertCA(在某些别名下导入IdP和SP的密钥库)
  • Out CA为IdP(CertIdP)颁发一个证书,为SP(CertSP)颁发一个证书.
  • IdP在其密钥库中具有CertIdP并且知道密码,因此IdP可以使用CertIdP对消息进行签名
  • SP/CertSP也是如此
  • 现在让我们假设SP不知道CertIdP并且IdP不知道CertSP.他们只知道用于签署CertIdP和CertSP的CertCA.(据我所知,我们有证书层次结构CertIdP - > CertCA < - CertSP here-)
  • IdP想要向SP发送签名消息.它会创建一条消息,然后使用CertIdP对其进行签名.
  • SP使用CertIdP接收IdP签名的消息.如上所述,SP没有CertIdP,只有父证书CertCA.

我的问题是:SP是否可以验证CertIdP签名的邮件的签名只有其父证书CertCA?

背景故事,为什么要这样.

我们正在使用PicketLink实现基于SAML的SSO.我们使用PicketLink的SAML2SignatureValidationHandler来验证签名.为此,服务提供商(SP)需要在其密钥库中具有IdP证书.当签名的SAML断言传递给SP时,此处理程序使用IdP的证书来验证签名.

上述过程运作良好,但我们有一些组织问题.此过程假定SP具有IdP的验证证书.如果出现问题,必须在SP端更换IdP的证书.我们可能会有大量的SP(当数不是数千时),所以这是一个很大的努力.

由于CertIdP和CertSP均由IdP和SP明确信任的相同授权机构(CA)颁发,因此我们认为可以使用CA的证书进行签名验证.如果这样做,这可能消除了在IdP和SP之间交换证书的需要.CA的证书也非常"长寿",所以如果只需要在永恒中交换一次(永恒,在我们的情况下大约10 - 20年).

但是,我不确定在技术上是否可以验证使用CertIdP签名的签名只有父级CertCA.可能吗?或者我们在这里完全错误的轨道?

如果它是相关的,我们在SP方面的Java/JBoss平台上,IdP是第三方软件.

更新:

这是我从IdP获得的签名:

    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <ds:Reference URI="#_...">
                <ds:Transforms>
                    <ds:Transform
                        Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
                            PrefixList="ds saml samlp" />
                    </ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <ds:DigestValue>r...=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>X...==</ds:SignatureValue>
    </ds:Signature>
Run Code Online (Sandbox Code Playgroud)

certificate digital-certificate saml saml-2.0 picketlink

8
推荐指数
1
解决办法
3548
查看次数

在identity.login()中不使用@PicketLink注释类

我正在尝试使用扩展BaseAuthenticator的@PicketLinked类.

我的设置是一个关于野生动物9.0.2.Final的耳朵项目.

我在我的jboss-deployment-structure.xml中使用它

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-deployment-structure>  
<deployment>  
     <dependencies>  
          <!-- This will enable PicketLink Authentication/Authorization and IDM dependencies to your deployment. -->
        <module name="org.picketlink.core.api" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.core" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.idm.api" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.idm" meta-inf="import" annotations="true"/>    
        <module name="org.picketlink.common" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.idm.schema" meta-inf="import" annotations="true"/>
    </dependencies>  
</deployment> 
<sub-deployment name="prestiz-web.war">
    <dependencies>  
          <!-- This will enable PicketLink Authentication/Authorization and IDM dependencies to your deployment. -->
        <module name="org.picketlink.core.api" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.core" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.idm.api" meta-inf="import" annotations="true"/>
        <module name="org.picketlink.idm" meta-inf="import" annotations="true"/> …
Run Code Online (Sandbox Code Playgroud)

java jboss annotations picketlink wildfly-9

7
推荐指数
1
解决办法
235
查看次数

如何从代码强制全局注销JBOSS/SSO?

我在使用Picketlink的IDP上使用JBoss中的SSO,没有很多企业Java安全性的经验,我需要做的是在某些事件或超时时强制全局注销用户.例如用户启动表单,但在5分钟内没有感觉到 - 我想强制从代码中注销全局.

通常,执行全局注销非常容易,只需将"GLO = true"添加到注销链接的URL,然后由SSO Valve捕获.但是,当用户未与浏览器连接时,如何从代码中调用它?

试图查看里面的Picketlink代码,虽然在SAML2Request里面有方法createLogoutRequest我还是不明白该怎么做,如何发送它,在哪里发送它.请指教.

java jboss single-sign-on saml-2.0 picketlink

5
推荐指数
0
解决办法
1302
查看次数