Оказалось, что rampart 1.5.2 (я не знаю о более новых версиях, я должен сохранить этот ...) заставляет сертификат иметь действительный пароль (не нулевой и не пустой). Я загрузил исходный код для rampart 1.5.2 и обнаружил следующий код внутри класса BindingBuilder.java (пакет org.apache.rampart.builder):
WSPasswordCallback[] cb = { new WSPasswordCallback(user,
WSPasswordCallback.SIGNATURE) };
try {
handler.handle(cb);
if(cb[0].getPassword() != null && !"".equals(cb[0].getPassword())) {
password = cb[0].getPassword();
log.debug("Password : " + password);
} else {
//If there's no password then throw an exception
throw new RampartException("noPasswordForUser",
new String[]{user});
}
}
Проблема заключается в следующем:
if(cb[0].getPassword() != null && !"".equals(cb[0].getPassword()))
Исключение выдается, если пароль получен нулевым или пустым из-за обратного вызова. Чтобы избежать этой проблемы, мне пришлось закомментировать часть кода следующим образом:
if(cb[0].getPassword() != null /*&& !"".equals(cb[0].getPassword())*/)
Я перекомпилировал класс и заменил полученный .class внутри rampart-core-1.5.2.jar
Исключение исчезло, теперь я могу успешно использовать сертификат без пароля.
Надеюсь, это поможет.