Java-эквивалент метода подписи XML C #

Я написал следующее. NET Framework 3.5 C #, который принимает расположение XML-документа и объектное представление цифрового сертификата X509 (с закрытым ключом) и возвращает XML-документ как объект с XML-подписью (XMLDsig), встроенной в качестве первого дочернего элемента корень.

Дело в том, что мне срочно нужно иметь возможность проделать ту же процедуру с Java SE 6, но я давно не писал Java и понятия не имею, с чего начать.

Может ли кто-нибудь предоставить эквивалентный метод в коде Java, который производит точный тот же XML-вывод?

private static XmlDocument SignXmlDocument(string xmlFilePath, X509Certificate2 certificate)
{
    // load xml from disk preserving whitespaces
    XmlDocument xmlDocument = new XmlDocument { PreserveWhitespace = true };
    xmlDocument.Load(xmlFilePath);

    // create signed xml with a same-document reference containing an enveloped-signature transform
    SignedXml signedXml = new SignedXml(xmlDocument) { SigningKey = certificate.PrivateKey };
    Reference reference = new Reference { Uri = "" };
    XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();            
    reference.AddTransform(env);
    signedXml.AddReference(reference);

    // embed public key information for signature validation purposes
    KeyInfo keyInfo = new KeyInfo();
    KeyInfoX509Data keyInfoX509Data = new KeyInfoX509Data(certificate, X509IncludeOption.ExcludeRoot);
    keyInfo.AddClause(keyInfoX509Data);
    signedXml.KeyInfo = keyInfo;

    // compute and retreive the signature xml
    signedXml.ComputeSignature();          
    XmlElement xmldsigXmlElement = signedXml.GetXml();

    // insert the signature xml into the xml document as first child of the root element
    xmlDocument.DocumentElement.PrependChild(xmlDocument.ImportNode(xmldsigXmlElement, true));

    return xmlDocument;
}
5
задан Perception 5 August 2011 в 15:07
поделиться