Java Rampart:如何在没有任何密码的情况下使用JKS证书

Java Rampart:如何在没有任何密码的情况下使用JKS证书,java,x509,wss4j,rampart,Java,X509,Wss4j,Rampart,我有以下情况: 一个没有密码的JKS密钥库文件,包含一个私钥,也不受保护。我已尝试配置Rampart以使用此密钥库,但始终出现以下错误: Caused by: org.apache.rampart.RampartException: No password supplied by the callback handler for the user : "username" 我的密码回调处理程序如下所示: 公共类PWCBHandlerCertificate实现CallbackHandler{ p

我有以下情况:

一个没有密码的JKS密钥库文件,包含一个私钥,也不受保护。我已尝试配置Rampart以使用此密钥库,但始终出现以下错误:

Caused by: org.apache.rampart.RampartException: No password supplied by the callback handler for the user : "username"
我的密码回调处理程序如下所示:

公共类PWCBHandlerCertificate实现CallbackHandler{

public void handle( Callback[] callbacks ) throws IOException, UnsupportedCallbackException {

    for ( int i = 0; i < callbacks.length; i++ ) {
        WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[i];

        String id = pwcb.getIdentifer();
        int usage = pwcb.getUsage();            
        if ( usage == WSPasswordCallback.DECRYPT || usage == WSPasswordCallback.SIGNATURE ) {                              
            Element temp = pwcb.getCustomToken();
            // used to retrieve password for private key
            if ( "username".equals( id ) ) {
                pwcb.setPassword( "" );
            }

        }
    }
}
公共无效句柄(回调[]回调)引发IOException、UnsupportedCallbackException{
for(int i=0;i
}

我错过了什么


提前感谢

事实证明rampart 1.5.2(我不知道更新的版本,我必须保留此版本…)强制证书具有有效密码(不为null也不为空)。 我下载了rampart 1.5.2的源代码,在BindingBuilder.java类(包org.apache.rampart.builder)中找到了以下代码:

问题在于:

if(cb[0].getPassword() != null && !"".equals(cb[0].getPassword()))
如果从回调收到的密码为null或空,则引发异常。为了避免这个问题,我不得不注释掉部分代码,如下所示:

if(cb[0].getPassword() != null /*&& !"".equals(cb[0].getPassword())*/)
我重新编译了这个类,并在rampart-core-1.5.2.jar中替换了生成的.class

异常消失了,我现在可以成功使用无密码证书了

我希望有帮助

if(cb[0].getPassword() != null /*&& !"".equals(cb[0].getPassword())*/)