3

최근에 중계자 서비스 공개 키를 사용하여 Saml2 어설 션을 암호화하려고했습니다. 불행하게도 나는 심지어 테스트 단계 여기공개 키 (opensaml)를 사용하는 SAML2 어설 션 암호화

확정 할 수없는 것은 내가 GlobalSecurityConfiguration을 설정하거나이 다를 수 있습니다 어떻게 지속적으로

KeyInfoGeneratorFactory kigf = 
     Configuration.getGlobalSecurityConfiguration() 
     .getKeyInfoGeneratorManager().getDefaultManager() 
     .getFactory(keyEncryptionCredential); 
    kekParams.setKeyInfoGenerator(kigf.newInstance()); 

에 널 포인터 예외를 받아 봐 내 코드

public class EncryptionTest { 

public static void main(String args[]){ 
    try { 

    // The Assertion to be encrypted 
     FileInputStream fis; 
     DataInputStream in, in2; 

     File f = new File("src/main/resources/AssertionTest"); 
     byte[] buffer = new byte[(int) f.length()]; 
     in = new DataInputStream(new FileInputStream(f)); 
     in.readFully(buffer); 
     in.close(); 

     //Assertion = DataInputStream.readUTF(in); 
     String in_assert = new String(buffer); 

     System.out.println(in_assert); 

    org.apache.axiom.om.OMElement OMElementAssertion = org.apache.axiom.om.util.AXIOMUtil.stringToOM(in_assert); 
    Assertion assertion = convertOMElementToAssertion2(OMElementAssertion); 

    // Assume this contains a recipient's RSA public key 
    Credential keyEncryptionCredential; 

    keyEncryptionCredential = getCredentialFromFilePath("src/main/resources/cert.pem"); 


    EncryptionParameters encParams = new EncryptionParameters(); 
    encParams.setAlgorithm(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128); 

    KeyEncryptionParameters kekParams = new KeyEncryptionParameters(); 
    kekParams.setEncryptionCredential(keyEncryptionCredential); 
    kekParams.setAlgorithm(EncryptionConstants.ALGO_ID_KEYTRANSPORT_RSAOAEP); 
    KeyInfoGeneratorFactory kigf = 
     Configuration.getGlobalSecurityConfiguration() 
     .getKeyInfoGeneratorManager().getDefaultManager() 
     .getFactory(keyEncryptionCredential); 
    kekParams.setKeyInfoGenerator(kigf.newInstance()); 

    Encrypter samlEncrypter = new Encrypter(encParams, kekParams); 
    samlEncrypter.setKeyPlacement(KeyPlacement.PEER); 

    EncryptedAssertion encryptedAssertion = samlEncrypter.encrypt(assertion); 

    System.out.println(encryptedAssertion); 

    } catch (EncryptionException e) { 
     e.printStackTrace(); 
    } catch (CertificateException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (KeyException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (XMLStreamException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 


} 

    public static Credential getCredentialFromFilePath(String certPath) throws IOException, CertificateException, KeyException { 
     InputStream inStream = new FileInputStream(certPath); 
     CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     Certificate cert = cf.generateCertificate(inStream); 
     inStream.close(); 

     //"Show yourself!" 
     System.out.println(cert.toString()); 

     BasicX509Credential cred = new BasicX509Credential(); 
     cred.setEntityCertificate((java.security.cert.X509Certificate) cert); 
     cred.setPrivateKey(null); 

     //System.out.println(cred.toString()); 

     return cred; 

     //return (Credential) org.opensaml.xml.security.SecurityHelper.getSimpleCredential((X509Certificate) cert, privatekey); 
    } 

    public static Assertion convertOMElementToAssertion2(OMElement element) { 

     Element assertionSAMLDOOM = (Element) new StAXOMBuilder(DOOMAbstractFactory.getOMFactory(), element.getXMLStreamReader()).getDocumentElement(); 
     try { 
      UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory(); 
      Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(Assertion.DEFAULT_ELEMENT_NAME); 

     return (Assertion) unmarshaller.unmarshall(assertionSAMLDOOM);  
     } catch (Exception e1) { 
      System.out.println("error: " + e1.toString()); 
     } 
     return null; 
     } 



} 

입니다 어설 션을 암호화하는 접근 방식이 효과가 있습니까?

답변

7

이 질문은 너무 오랫동안 열려 있습니다. 문제는 OpenSaml의 초기화입니다. 간단

DefaultBootstrap.bootstrap(); 

도움 및 해결 된 문제.

+0

고마워요. 우리는이 머리에 머리카락을 내고있었습니다. –