سؤال

أريد توقيع طلبات خدمة الويب باستخدام Apache CXF و WSS4J. على حد علمي ، سأحتاج إلى متجر JKS يحتوي على الشهادة التي أريد استخدامها للتوقيع. هناك شرط أن تكون قادرًا على استخدام شهادة X.509 من متجر شهادات Windows. يجب قراءة الشهادة من المتجر في وقت توقيع طلب خدمة الويب. أعرف كيفية الوصول إلى المتجر والحصول على الشهادة. ولكن كيف يمكنني استخدامه للتوقيع بدلاً من الشهادة من متجر JKS الخاص بي؟

هل كانت مفيدة؟

المحلول

لا يلزم أن يكون keystore أحد JKS. يمكنك كتابة مزود JCA الخاص بك وتنفيذ keystorespi ، وجعلها تصل إلى متجر شهادات Windows.

نصائح أخرى

ينظر الى هذه وهذا ما يفسر كيفية استخدام Windows Keystore. ثم يجب عليك تكوين CXF لاستخدام Keystore هذا.

وجدت للتو أنه من الممكن تحقيق استخدام 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