首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泽西-client 2.22.2 -如何正确设置SunPKCS11密钥存储在SslConfigurator上?

泽西-client 2.22.2 -如何正确设置SunPKCS11密钥存储在SslConfigurator上?
EN

Stack Overflow用户
提问于 2016-04-26 21:56:05
回答 2查看 1.9K关注 0票数 3

我一直试图让我的球衣客户端使用泽西/灰熊Rest进行ssl客户端身份验证。其他客户端与此服务器的握手是成功的,但我的java客户端在使用泽西客户端时遇到了麻烦。当我运行下面的代码时,成功地加载了密钥存储库,当调用SslConfigurator的createSSLContext()时,ssl调试输出显示了正确访问这个密钥存储库并找到了我的私钥。

但是,当使用客户端的WebTarget时,ssl调试输出显示握手正在与默认的keystore JKS进行。为什么ClientBuilder不使用来自SSLContext的密钥存储库?

代码语言:javascript
复制
File tmpConfigFile = File.createTempFile("pkcs11-", "conf");
        tmpConfigFile.deleteOnExit();
        PrintWriter configWriter = new PrintWriter(new FileOutputStream(tmpConfigFile), true);
        configWriter.println("name=ActiveClient");
        configWriter.println("library=\"C:\\\\Program Files\\\\ActivIdentity\\\\ActivClient\\\\acpkcs211.dll\"");
        configWriter.println("slotListIndex=0");
        SunPKCS11 provider = new SunPKCS11(tmpConfigFile.getAbsolutePath());
        Security.addProvider(provider);
        //  KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);

        KeyStore keyStore = KeyStore.getInstance("PKCS11");
        keyStore.load(null, null);

        ClientConfig config = new ClientConfig();

        SslConfigurator sslConfig = SslConfigurator.newInstance()
                .keyStore(keyStore)
                .keyStorePassword("mypin")
                .keyStoreType("PKCS11")
                .trustStoreFile(TRUSTORE_CLIENT_FILE)
                .trustStorePassword(TRUSTSTORE_CLIENT_PWD)
                .securityProtocol("TLS");



        final SSLContext sslContext = sslConfig.createSSLContext();

        Client client = ClientBuilder
                .newBuilder().hostnameVerifier(new MyHostnNameVerifier())
                .sslContext(sslContext)
                .build();
        WebTarget target = client.target("https://localhost:8443/appname/resources/employees?qparam=something");  
     Response res = target.request().accept(MediaType.APPLICATION_JSON).get();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-24 16:04:29

这段代码确实有效。问题是,我的服务器的信任证书无法用于它需要信任的智能卡证书。我向服务器上的信任库添加了正确的证书,然后它就开始工作了。ssl调试消息不太清楚。

票数 1
EN

Stack Overflow用户

发布于 2016-05-25 08:00:36

这一次我遇到了很多问题,我找到了实现我的目标的方法。在您的示例中,我看不到ClientConfig config实例的任何用法。这对我起了作用:

代码语言:javascript
复制
    ClientConfig config = new ClientConfig();
    config.connectorProvider(new ApacheConnectorProvider());
    Client client = ClientBuilder.newBuilder().hostnameVerifier(new MyHostnNameVerifier())
            .sslContext(sslContext).withConfig(config).build();

我发现ApacheConnectorProvider更适合使用安全层或代理的连接(女巫是我解决的另一个巨大问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36876500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档