4

最近、relaying-partyサービスの公開鍵を使用してSaml2アサーションを暗号化しようとしました。残念ながら、テストフェーズでも完了できません

これが私のコードです

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;
      }



}

私は常にNullポインタ例外を受け取ります

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

GlobalSecurityConfigurationを設定するにはどうすればよいですか、または機能するアサーションを暗号化する別のアプローチはありますか?

4

1 に答える 1

9

この質問はあまりにも長い間開かれていました。問題はOpenSamlの初期化でした。単純

DefaultBootstrap.bootstrap();

問題を解決しました。

于 2012-07-31T10:30:20.320 に答える