Webservice Security и сертификаты Windows - PullRequest
7 голосов
/ 23 ноября 2010

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

Ответы [ 3 ]

1 голос
/ 19 января 2011

KeyStore не обязательно должен быть JKS.Вы можете написать свой собственный JCA-провайдер и внедрить KeyStoreSpi и получить доступ к хранилищу сертификатов Windows.

0 голосов
/ 04 мая 2015

Только что удалось достичь с помощью класса 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");
    }
}

Вот и все.

0 голосов
/ 02 декабря 2010

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

...