Тест Junit: невозможно (opensaml) дешифровать EncryptedAssertion, ключ шифрования данных ошибки null - PullRequest
0 голосов
/ 05 ноября 2019

Я написал следующий метод для расшифровки зашифрованного утверждения, возвращенного из объекта ответа, извлеченного из XML-файла. Тем не менее мне не удалось успешно выполнить расшифровку с помощью следующего метода:

public Assertion methodB(EncryptedAssertion encryptedAssertion) {

      List<Credential> decryptionCredential = methodC(publicKeyPath, privateKeyPath);
      StaticKeyInfoCredentialResolver skicr = new StaticKeyInfoCredentialResolver(decryptionCredential);

      Decrypter samlDecrypter = new Decrypter(null, skicr, new InlineEncryptedKeyResolver());

      try {
           Assertion assertion = samlDecrypter.decrypt(encryptedAssertion);  <= Error Here
      } catch (DecryptionException e) {
           e.printStackTrace();
      }
}

Ниже приводится сообщение об ошибке в консоли:

Test Print EncryptedAssertions: [org.opensaml.saml2.core.impl.EncryptedAssertionImpl@57f83c82]
16:52:54.955 [main] ERROR org.opensaml.xml.encryption.Decrypter - Data encryption key was null



java.lang.IllegalArgumentException: Data encryption key may not be null

    at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:667)
    at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:639)
    at org.opensaml.xml.encryption.Decrypter.decryptUsingResolvedEncryptedKey(Decrypter.java:794)
    at org.opensaml.xml.encryption.Decrypter.decryptDataToDOM(Decrypter.java:535)
    at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:453)
    at org.opensaml.xml.encryption.Decrypter.decryptData(Decrypter.java:414)
    at org.opensaml.saml2.encryption.Decrypter.decryptData(Decrypter.java:141)
    at org.opensaml.saml2.encryption.Decrypter.decrypt(Decrypter.java:69)

Следующий метод A вызывает метод B, приведенный выше, предоставляязашифрованное утверждение:

public Assertion methodA() {

      Response res = methodDReturnResponseObject;
      List<EncryptedAssertion> = encryptedAssertions = res.getEncryptedAssertions();
      if(encryptedAssertions.size() > 0) {

            for(EncryptedAssertion ea : encryptedAssertions) {
                 Assertion assertion = methodB(ea); 
                 .....
            }
      }
}

Строка ответа xml выглядит следующим образом (https://www.samltool.com/generic_sso_res.php):

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_8e8dc5f69a98cc4c1ff3427e5ce34606fd672f91e6" Version="2.0" IssueInstant="2014-07-17T01:01:48Z" Destination="http://sp.example.com/demo1/index.php?acs" InResponseTo="ONELOGIN_4fee3b046395c4e751011e97f8900b5273d56685">
  <saml:Issuer>http://idp.example.com/metadata.php</saml:Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:EncryptedAssertion>
    <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/><dsig:KeyInfo xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><xenc:EncryptedKey><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/><xenc:CipherData><xenc:CipherValue>InNvG0i82QZNYmv4VasOja1XZNp+CZO6Z0PvzJGFBrHQ6w5Zw6ECK/c3vPXtnSvD8QtCKsW28gG0FqsoBboap2zCVdtJw3j20dr2uxOUKo9gWeatDAmjzg10hDsnWlm2kINfPMqqq4daTyyZ8f62EBOhR9b8ydxEarhcqCtUWu8=</xenc:CipherValue></xenc:CipherData></xenc:EncryptedKey></dsig:KeyInfo>
   <xenc:CipherData>
      <xenc:CipherValue>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</xenc:CipherValue>
   </xenc:CipherData>
</xenc:EncryptedData>
  </saml:EncryptedAssertion>
</samlp:Response>

Я просмотрел различные сайты, но решения не применимы в моем сценарии. IБуду очень признателен за любую форму помощи или обмена знаниями, если вы столкнулись со следующей проблемой ранее. Спасибо!

...