是否可以验证仅在层次结构中具有祖先或根证书的签名?
免责声明:我是证书处理的新手,所以请原谅天真的术语.
考虑以下情况.
我的问题是: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) 我正在尝试使用扩展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) 我在使用Picketlink的IDP上使用JBoss中的SSO,没有很多企业Java安全性的经验,我需要做的是在某些事件或超时时强制全局注销用户.例如用户启动表单,但在5分钟内没有感觉到 - 我想强制从代码中注销全局.
通常,执行全局注销非常容易,只需将"GLO = true"添加到注销链接的URL,然后由SSO Valve捕获.但是,当用户未与浏览器连接时,如何从代码中调用它?
试图查看里面的Picketlink代码,虽然在SAML2Request里面有方法createLogoutRequest我还是不明白该怎么做,如何发送它,在哪里发送它.请指教.