1

PFXファイルを使用してWebサービスを呼び出すためのこのコードがあります

System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.keyStore", pathPFX);
System.setProperty("javax.net.ssl.keyStorePassword", pass);
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
QName serviceName = new QName("www.example.org", "example");

//QName for Port As defined in wsdl.
QName portName = new QName("www.example.org", "exampleSOAP");

// Create a dynamic Service instance
Service service = Service.create(serviceName);

// Add a port to the Service
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

//Create a dispatch instance
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); 

MessageFactory factory = MessageFactory.newInstance();

SOAPMessage request = factory.createMessage();

// Object for message parts
SOAPPart sp = request.getSOAPPart();
StreamSource prepMsg = new StreamSource(new FileInputStream(pathXML));
sp.setContent(prepMsg);

// Save message
request.saveChanges();

SOAPMessage reply = null;
boolean success = true;
String response = "";
try {
    //Invoke Endpoint Operation and read response
    reply = dispatch.invoke(request);
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    reply.writeTo(out);
    creaXMLResponse(out.toString());
} 
catch (WebServiceException wse)
{
  wse.printStackTrace();
    success = false;
}

そして、それはうまく機能していますが、同じTomcatで実行される別のクライアントに対して別のPFXファイルを使用する必要があります。

このコードを使用すると、Tomcat を再起動して別の PFX を使用する必要があるため、pfx をキーストアとして選択する動的な方法を作成する必要がありますが、JKS ファイルを使用する必要はありません (クライアントの数が増加し、作成できなくなります)。毎回新しいJKS) ??

注: キーストアと SSLContext の使用について読んでいますが、それらを実際のコードにリンクする方法がわかりません

前もって感謝します

4

1 に答える 1

0

名前が示すように、キーストアは 1 つだけでなく、複数のキーを格納できます。したがって、一般的なアプローチは、すべてのサーバーとのハンドシェイクに必要なすべてのキーを同じキーストアに格納することです。

keytool のマニュアル ページを確認してください。これに関するチュートリアルがたくさんあります。

于 2013-12-04T05:28:09.443 に答える