2013-06-06 80 views
1

我和我的團隊正在使用opensaml生成SAML令牌。我們已經做好了準備,但是另一個團隊的成員告訴我們,如果我們可以在一定程度上配置生成的令牌,他們會很感激。Opensaml KeyInfo配置

他們希望我們改變的區域是令牌的EncryptedKey部分。目前,它看起來是這樣的:

 <xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" 
     Id="_9b07dd8a259d8ee8162adf17cd761d34"> 
     <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" 
      xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" /> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
       <ds:X509Certificate>MIIC4DCCAcigAwIBAgIEUUrqgDANBgkqhkiG9w0BAQUFADAyMTAwLgYDVQQDEydCRFNQVUtMNzAz 
        NDIzODUuY2xpZW50LmJhcmNsYXlzY29ycC5jb20wHhcNMTMwMzIxMTEwOTUyWhcNMTQwMzIxMTEw 
        OTUyWjAyMTAwLgYDVQQDEydCRFNQVUtMNzAzNDIzODUuY2xpZW50LmJhcmNsYXlzY29ycC5jb20w 
        ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmWG7p7iATCM06WMsKg8LlLg8AXUvyZI6l 
        hZkz7Sc/moL6WtSUBrL60joLAi4L+P/VrbtZMNzP9kh3uyW0uZ0Vb+DhsXMQBccgdQMzq//nK2GN 
        0+/F4KYKLsdYpecR28YlOQRl2Y6Gc3i8PZIk2a8bmf64tbOCyOWHzX7fNHo+MSM3JcWOLltFKZCT 
        z8O8OJjhFqxA7fl+zLBEXprJZtxU/AOaLW6qBPh8w1LmIfU8nK5bnjlKpdobV8uXlXkKVOJWxm1P 
        yjQDt1G1FKyBKLmyPbw9xY5DSDmQFpwgeZIQdOkRrrYzwYzYFCuqL9USjPw6414kYqBNr221SWei 
        pLjbAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAILQ69plSMdO8/3nx5ZJPMWSS2MqFlThAoMW0kmK 
        20DBH5o3b+6BZ4d566IEGRReOOFVxMKNbuq3thrIliUQG0Qzzu0T41UE7noFXwZOwavYxhy1BdwW 
        B906CAb0Qq7qu1FXd8PVKzLn7IazaPXSuRkhGmoE4vcRVphRZkzU6xjkfEZ5AO+7qVE/5tcREXAB 
        coxpqWeTVeZiT0oazx7eWyqVlqSaLboOqByk5O921hY4E7PZaS7HGBXHcywVHU9fXwbEIgNl0noC 
        sduXcYkjC6WEiV8rQiuBXx5bspPkau28V+GQ1kNwuq5ypEskDW3GHUrZiAmaucooahVzvhDiBM0= 
       </ds:X509Certificate> 
      </ds:X509Data> 
     </ds:KeyInfo> 
     <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> 
      <xenc:CipherValue>LhIn8/SjXbnCsMP6ITxb++0rFYpN8S0L6K/VE74XKjh4Jtlo8IaZQi6c9HRqlII/VT5OKaVySNCO2wOaKS/EUsTt5a/0oR9Yh9mCLt9NQDpkxau1OiydwTYoo6G29fFpYgeDXEPrdR4iUlOERuulmFlNTETWu/doHb4b6hFZdsLEtQH1qSi/jBIq2Q7peXI396G8RWDoWO1urJtIQWR5HjqDckcp3eQ2AC3mXkm949g+OS3Y3g/dPi5erkAhNmFXdinOnX6SQWHEBhFkroFfzqkzEPOVlJdL5Rb9X1mgEk5tJefSUChs6HguRqMeMr0s4UFi/KUwlZbINio1hSNTZg== 
      </xenc:CipherValue> 
     </xenc:CipherData> 
     <xenc:ReferenceList> 
      <xenc:DataReference URI="#_a04f85fb05fda175a5e7eba026640f16" /> 
     </xenc:ReferenceList> 
    </xenc:EncryptedKey> 

我的同事想它的樣子,但是是沿此線的東西:

<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"> 
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/> 
    <dsig:KeyInfo xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> 
    <dsig:KeyName>BCL12232</dsig:KeyName> 
    </dsig:KeyInfo> 
    <xenc:CipherData> 
     <xenc:CipherValue> 
     H4lcHtpC9WJcwbZ4rWFEipoRN7tbc7EOWRqZPWDtds9WaukKZP8mPECxYS7LGbV5HP+87nTE5AMfTOLecVLMiR42vFL8sza6HiMD1L5+At26UUgowlixjnUs89vE8c11sv7J5eTVb41bi/DSFLRHdaZ+sJ4ojHCxwcsUcxelsjC+kcAC09hGXOT6b7DBxzWgk+XHY86uuvpYpLLu28TibzpJdpo1gm237QJrAcz2RSY9RqCDN9UOtByHbbihCiKIMIUXG6wHBUnAtZbTp7XS3RMgkK1YBys91ImXvmRYTaNRnW2sQmdwli6m1Oxi9vFFvt8wAUClNRbM1m6wX/r1oQ== 
     </xenc:CipherValue> 
    </xenc:CipherData> 
</xenc:EncryptedKey> 

正如你所看到的,所不同的是在後面的例子中,X509證書沒有被添加到SAML令牌中,而關於密鑰的唯一信息是密鑰名稱。

看了看,我認爲這個問題可能在證書中。

有沒有人有過這樣配置opensaml的經驗?怎樣才能像這樣配置KeyInfo?

在此先感謝您的幫助。

更新:我已經制定了如何使用KeyInfoHelper.addKeyName(KeyInfo, KeyName);來設置鍵名,但我仍然沒有隱藏X509證書信息的運氣。

+0

能否請您發表您使用做加密 –

+0

@Stefan的頌歌,感謝回答到這一點,但實際上我現在有它排序。這種情況下的約定是什麼?我應該對自己的問題發表一個答案嗎? –

+1

是將您的解決方案作爲答案發布的好主意。 –

回答

0

問題是我正在使用opensaml爲我自動生成關鍵信息。默認情況下,附加x509證書。 我通過創建自己的KeyInfo對象克服了這個問題,並簡單地爲它添加了一個鍵名。

看起來有點亂,但完成了工作。

下面是我寫的創建關鍵信息的方法。

private KeyInfo getKeyInfo(final Credential c, final String keyName) { 

    final SecurityConfiguration secConfiguration = 
      Configuration.getGlobalSecurityConfiguration(); 
    final NamedKeyInfoGeneratorManager namedKeyInfoGeneratorManager = 
      secConfiguration.getKeyInfoGeneratorManager(); 
    final KeyInfoGeneratorManager keyInfoGeneratorManager = 
      namedKeyInfoGeneratorManager.getDefaultManager(); 
    final KeyInfoGeneratorFactory keyInfoGeneratorFactory = 
      keyInfoGeneratorManager.getFactory(c); 
    final KeyInfoGenerator keyInfoGenerator = keyInfoGeneratorFactory.newInstance(); 
    KeyInfo keyInfo; 

    keyInfo = keyInfoGenerator.generate(c); 
    KeyInfoHelper.addKeyName(keyInfo, 
      keyName); 
    return keyInfo; 
}