Конфигурация cxf merlindevice

1

Мне нужно подписать тело сообщения мыла веб-службы и временную метку с помощью смарт-карты.

Я использую cxf 2.7.12. В cxf уродливой документации, они говорят: "MerlinDevice: на основе Merlin, позволяет загружать хранилища ключей с использованием пустого InputStream, например, на устройстве смарт-карты". Но ни один пример или документация не предоставляется.

Есть ли кто-нибудь, кто может обеспечить софигурирование мерлиндевичей?

Теги:
cxf

2 ответа

1
Лучший ответ

Вот как я решил проблему.

  1. Создайте класс, например, PKCS11Device, расширяющий Merlin
  2. Скопируйте в него источник MerlinDevice
  3. Скопируйте метод загрузки Merlin в нем
  4. Измените первые строки метода загрузки как

    public KeyStore load(InputStream input, String storepass, String provider, 
    String type) 
    throws CredentialException {
    
    KeyStore ks = null;
    
    SunPKCS11 akisProvider = new SunPKCS11("pkcs.properties");
    Security.addProvider(akisProvider);
    
    try {
        if (provider == null || provider.length() == 0) {
            ks = KeyStore.getInstance(type);
        } else {
            //ks = KeyStore.getInstance(type, provider);
            ks = KeyStore.getInstance("PKCS11",akisProvider);
        }
    

    ...............

  5. Repackage wss4j.jar

  6. Замените новую банку старой в папке cxf lib.

    -----In ваш проект

  7. Создайте свою собственную карту pkcs.properties

моя была

name = AKIS
library = C:/windows/system32/akisp11.dll
disabledMechanisms={ CKM_SHA1_RSA_PKCS }
  1. Создайте файл wss4j.properties как

    org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.PKCS11Device      
    org.apache.ws.security.crypto.merlin.keystore.provider=SunPKCS11
    org.apache.ws.security.crypto.merlin.keystore.type=PKCS11
    org.apache.ws.security.crypto.merlin.keystore.password=xxxxx
    

И это работает!

1

См. Здесь документацию: http://ws.apache.org/wss4j/config.html

Фактический файл свойств будет почти идентичен стандарту, который используется для "Merlin", за исключением того, что вместо этого поставщик будет называться "MerlinDevice":

https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob_plain;f=systests/ws-security-examples/src/test/resources/alice.properties;hb= ГЛАВА

Колм.

  • 0
    Спасибо, Колм. Но
  • 0
    Привет Колм. Ваша преемственность распространена в сети, включая документацию wss4j и cxf. При изменении строки с помощью org.apache.ws.security.crypto.provider = org.apache.ws.security.components.crypto.MerlinDevice возникает ошибка java.lang.NoSuchMethodException: org.apache.ws.security.components.crypto .MerlinDevice. <Init> приходит. На самом деле, у Мерлина есть метод getPrivateKey, но вы не можете получить закрытый ключ со смарт-карты. Это проблема, я думаю. А в конфигурации нужно передать родную смарт-карту lib. к устройству, но нет примера того, как.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню