Вопрос

Я хочу подписать запросы WebService, используя Apache CXF и WSS4J. Насколько я знаю, мне бы понадобится магазин JKS, содержащий сертификат, который я хочу использовать для подписания. Существует требование, чтобы иметь возможность использовать сертификат X.509 из хранилища сертификата Windows. Сертификат должен быть прочитан из магазина во время подписания запроса WebService. Я знаю, как получить доступ к магазину и получить сертификат. Но как я могу использовать его для подписания вместо сертификата из моих собственных JKS Store?

Это было полезно?

Решение

Кейстор не должен быть JKS One. Вы можете написать свой собственный поставщик JCA и внедрить Keystorespi, и имейте доступов в хранилище сертификатов Windows.

Другие советы

смотреть на это Это объясняет, как использовать Windows Keystore. Затем вы должны настроить CXF, чтобы использовать этот ключ.

Только что нашел можно добиться использования MerlinDevice класс. Вот как это сделано:

1) Настройка свойств для WSS4JOutInterceptor:

Map<String,Object> outProps = new HashMap<String,Object>();
outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, "Friendly_name_of_your_certificate");
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, StupidCallback.class.getName());
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties");
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);

2) то client_sign.properties Файл выглядит так:

org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.MerlinDevice
keystore.provider=SunMSCAPI
cert.provider=SunMSCAPI
keystore.type=Windows-MY
truststore.type=Windows-ROOT

3) и StupidCallback Просто возвращает постоянную строку в качестве пароля (его значение не имеет значения):

public class StupidCallback implements CallbackHandler
{
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
    {
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
        pc.setPassword("password");
    }
}

Это все.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top