Мне нужен клиент JAX-WS (сгенерированный с помощью wsdl2 java) для подписи его сообщений и проверки подписи ответных сообщений. Это должно быть не на транспортном уровне, а на уровне сообщений. Сертификат неизвестен во время компиляции (каждый пользователь имеет свой собственный сертификат и загружен).
Если бы он был на транспортном уровне, я бы создал хранилище ключей с необходимым сертификатом и из него создал бы KeyManagerFactory. - Trustfactory будет создан таким же образом, но повторно использован.
val certFactory = CertificateFactory.getInstance("X.509")
val certStream = getResource("file").openStream().buffered()
val cert = certFactory.generateCertificate(certStream)
val clientKeystore = KeyStore.getInstance(KeyStore.getDefaultType())
clientKeystore.load(null, null)
clientKeystore.setCertificateEntry("certificate", cert)
val kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
kmf.init(clientKeystore, "".toCharArray())
val caCertStream = getResource("file").openStream().buffered()
val caCert = certFactory.generateCertificate(caCertStream)
val caKeyStore = KeyStore.getInstance(KeyStore.getDefaultType())
caKeyStore.load(null, null)
caKeyStore.setCertificateEntry("ca-certificate", caCert)
val context = SSLContext.getInstance("TLSv1.2")
context.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, null)
requestContext.put(JAXWSProperties.SSL_SOCKET_FACTORY, context.socketFactory)
Однако, поскольку он должен быть на уровне сообщений, мне кажется, мне нужно использовать WSS4J, и, насколько я могу судить, это работает только с файл свойств, который ссылается на файл хранилища ключей.
Как добавить сертификаты для подписи и проверки на уровне сообщений с помощью WSS4J?