Мне нужно подписать тело сообщения мыла веб-службы и временную метку с помощью смарт-карты.
Я использую cxf 2.7.12. В cxf уродливой документации, они говорят: "MerlinDevice: на основе Merlin, позволяет загружать хранилища ключей с использованием пустого InputStream, например, на устройстве смарт-карты". Но ни один пример или документация не предоставляется.
Есть ли кто-нибудь, кто может обеспечить софигурирование мерлиндевичей?
Вот как я решил проблему.
Измените первые строки метода загрузки как
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);
}
...............
Repackage wss4j.jar
Замените новую банку старой в папке cxf lib.
-----In ваш проект
моя была
name = AKIS
library = C:/windows/system32/akisp11.dll
disabledMechanisms={ CKM_SHA1_RSA_PKCS }
Создайте файл 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
И это работает!
См. Здесь документацию: http://ws.apache.org/wss4j/config.html
Фактический файл свойств будет почти идентичен стандарту, который используется для "Merlin", за исключением того, что вместо этого поставщик будет называться "MerlinDevice":
Колм.