带有身份验证的Java Web服务调用

带有身份验证的Java Web服务调用,java,xml,tomcat,webservice-client,Java,Xml,Tomcat,Webservice Client,我正在开发需要身份验证和xml签名的webservice客户端。 我读过很多文章,但我的那篇看起来不一样 我需要发送一个包含一些证书详细信息的标签的请求。 我从服务提供商那里收到了几个文件(certificate.crt、certificate.p12、certificate.pem) 我使用follString providerName= System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI"

我正在开发需要身份验证和xml签名的webservice客户端。 我读过很多文章,但我的那篇看起来不一样

我需要发送一个包含一些证书详细信息的标签的请求。 我从服务提供商那里收到了几个文件(certificate.crt、certificate.p12、certificate.pem)

我使用follString providerName=

System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI");

        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());

        Reference ref = fac.newReference("", fac.newDigestMethod(
                DigestMethod.SHA1, null), Collections.singletonList(fac
                .newTransform(Transform.ENVELOPED, (XMLStructure) null)), null,
                null);

        // Create the SignedInfo
        SignedInfo si = fac.newSignedInfo(
                fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE_WITH_COMMENTS, (C14NMethodParameterSpec) null),
                fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null), Collections.singletonList(ref));

        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
        kpg.initialize(512);
        KeyPair kp = kpg.generateKeyPair();

        KeyInfoFactory kif = fac.getKeyInfoFactory();
        KeyValue kv = kif.newKeyValue(kp.getPublic());

        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate cert = cf.generateCertificate(new FileInputStream(new File("certificate.crt")));

        X509Data x509d = kif.newX509Data(Collections.singletonList(cert));
        KeyInfo ki = kif.newKeyInfo(Arrays.asList(x509d, kv));

        Document doc = (Document) result.getNode();

        DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc.getDocumentElement());

        XMLSignature signature = fac.newXMLSignature(si, ki);
        signature.sign(dsc);
但是RSA密钥是生成的,并且每次调用都不同。这很明显,因为我使用的是KeyPairGenerator。是否可以从P12文件导入我的私钥

当我在tomcat上运行此应用程序时,是否需要以某种方式对其进行配置以启用对服务的HTTPS调用?

您可以使用

加载文件:

KeyStore ks = KeyStore.getInstance("PKCS12");
FileInputStream ksin = new FileInputStream("myfile.p12");
ks.load(ksin, "password");
getKey("keyalis", "password");