Java 如何从数据库中读取密钥库

Java 如何从数据库中读取密钥库,java,web-services,cxf,x509certificate,Java,Web Services,Cxf,X509certificate,我正在集成cxf Web服务,没有spring,消息已签名。作为指导,我使用了本教程。 我想在数据库中存储x509证书或密钥库。 我已重写WSS4JOutInterceptor.loadCryptoFromPropertiesFile方法 @Override protected Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData) throws WSSecurityException {

我正在集成cxf Web服务,没有spring,消息已签名。作为指导,我使用了本教程。 我想在数据库中存储x509证书或密钥库。
我已重写WSS4JOutInterceptor.loadCryptoFromPropertiesFile方法

@Override
    protected Crypto loadCryptoFromPropertiesFile(String propFilename, RequestData reqData) throws WSSecurityException {
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(...);
        X509Certificate certificate = (X509Certificate) ks.getCertificate("client");

        X509Certificate[] certificates = { certificate};

        CertificateStore cs = new CertificateStore(certificates);
        return cs;
    }
但这里有几个问题:
1.有一个错误,比如

原因:java.lang.NullPointerException:提供的空名称位于 javax.security.auth.x500.X500Principal.(X500Principal.java:172)

我已检查,subjectDN不为空
2.我不确定这是否是一种方式,我是否应该以某种方式附加私钥来签署消息

  • 错误是因为CertificationStore不支持别名
  • 更好的方法是通过扩展CryptoBase实现自定义提供程序
  • 错误是因为CertificationStore不支持别名
  • 更好的方法是通过扩展CryptoBase实现自定义提供程序

  • 这可能是重复的,因为我认为从db读取密钥库没有问题。问题在于WSS4JOutInterceptor,因为它只读取属性如果我没有错的话。假设WSS4JoutinReceptor只读取或接受属性类型,您可以使用适配器模式为属性调整代码。希望能有帮助!这可能是重复的,因为我认为从db读取密钥库没有问题。问题在于WSS4JOutInterceptor,因为它只读取属性如果我没有错的话。假设WSS4JoutinReceptor只读取或接受属性类型,您可以使用适配器模式为属性调整代码。希望能有帮助!这不是一个很有帮助的答案。1.为什么缺少对别名的支持会导致此错误?2.进一步解释扩展CryptoBase。这不是一个非常有用的答案。1.为什么缺少对别名的支持会导致此错误?2.进一步解释扩展CryptoBase。