JAX-WS CXF WSS4J Добавление сертификатов во время выполнения для подписи сообщений - PullRequest
0 голосов
/ 16 апреля 2020

Мне нужен клиент 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?

...