Как выполнить проверку подписи отпечатка SOAP в Spring WS? - PullRequest
0 голосов
/ 27 сентября 2019

Я реализую SOAP-клиент, используя Spring WS для службы, которая ожидает и возвращает заголовок безопасности подписи отпечатка.Согласно Spring WS javadoc, защита исходящего запроса не должна быть возможна с использованием алгоритма отпечатка пальца (он говорит: «Для подписи IssuerSerial и DirectReference действительны только.»):

https://docs.spring.io/spring-ws/site/apidocs/org/springframework/ws/soap/security/wss4j/Wss4jSecurityInterceptor.html#setSecurementSignatureKeyIdentifier(java.lang.String)

Но создание подписи на самом деле, кажется, работает просто отлично.Однако при попытке проверить подпись входящего ответа из Spring WS CryptographyCallbackHandler#handleX509CertificateRequest выбрасывается UnsupportedCallbackException;исходный код которого, кажется, действительно предполагает, что проверка подписи отпечатка пальца просто не реализована:

protected final void handleX509CertificateRequest(SignatureVerificationKeyCallback callback,
                                                  SignatureVerificationKeyCallback.X509CertificateRequest request)
        throws UnsupportedCallbackException, IOException {
    if (request instanceof SignatureVerificationKeyCallback.PublicKeyBasedRequest) {
        handlePublicKeyBasedRequest(callback, (SignatureVerificationKeyCallback.PublicKeyBasedRequest) request);
    }
    else if (request instanceof SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) {
        handleX509IssuerSerialBasedRequest(callback,
                (SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) request);
    }
    else if (request instanceof SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) {
        handleX509SubjectKeyIdentifierBasedRequest(callback,
                (SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) request);
    }
    else {
        throw new UnsupportedCallbackException(callback);
    }
}

Во время выполнения запрос является экземпляром SignatureVerificationKeyCallback.ThumbprintBasedRequest (что странным образом реализуется ,поэтому мне любопытно, почему фактическая проверка не ...), так что это действительно провалилось бы через эту if / else цепочку.

Это правильно и Spring Spring не поддерживает проверку подписи отпечатка пальца?И если да, есть ли альтернатива и / или плагин для использования вместо?Если есть выделенная библиотека проверки подписи отпечатка SOAP, я мог бы написать свой собственный обработчик и использовать его, но я бы не стал сам реализовывать действительный код проверки.

...