Java Rampart:如何在没有任何密码的情况下使用JKS证书
我有以下情况: 一个没有密码的JKS密钥库文件,包含一个私钥,也不受保护。我已尝试配置Rampart以使用此密钥库,但始终出现以下错误: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
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())*/)