java - keystore 加载

标签 java ssl keystore

我想知道下面的 java 中的等价物是什么:

-Djavax.net.ssl.trustStore=keystore.jks -Djavax.net.ssl.keyStore=keystore.jks
-Djavax.net.debug=ssl -Djavax.net.ssl.keyStorePassword=test JavaFile

我想加载 keystore ,而不是将其作为参数从命令行发送。我一直在与:

private TcpLink createSSL() {
        KeyStore keyStore = null;
        TrustManagerFactory tmf = null;
        SSLContext ctx = null;
        SSLSocket socket = null;
        TcpLink smscLink = null;

        try {
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            LOGGER.info("Got keystore");
            keyStore.load(new FileInputStream("/root/keystore.jks"), "test".toCharArray());
            LOGGER.info("Loaded keystore");
            tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(keyStore);
            LOGGER.info("Inited keystore");
            ctx = SSLContext.getInstance("TLSv1");
            ctx.init(null, tmf.getTrustManagers(), null);
            SSLSocketFactory factory = ctx.getSocketFactory();
            socket = (SSLSocket)factory.createSocket("100.100.201.189", 8807);
            LOGGER.info("Got socket");
            smscLink = new TcpLink(socket);

            return smscLink;

        } catch (KeyStoreException e) {
            LOGGER.error("Key store exception : " + e);
        } catch (NoSuchAlgorithmException e) {
            LOGGER.error("NoSuchAlgorithmException : " + e);
        } catch (CertificateException e) {
            LOGGER.error("CertificateException : " + e);
        } catch (FileNotFoundException e) {
            LOGGER.error("FileNotFoundException : " + e);
        } catch (IOException e) {
            LOGGER.error("FileNotFoundException : " + e);
        } catch (KeyManagementException e) {
            LOGGER.error("KeyManagementException : " + e);
        } catch (Exception e) {
            LOGGER.error("Exception : " + e);
        }
        return null;
    }

但我得到:

javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1293)
        at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:65)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)

欢迎任何想法!

谢谢

最佳答案

您可以这样设置系统属性:

System.setProperty("javax.net.ssl.keyStore", '/path/to/keystore.jks');
System.setProperty("javax.net.ssl.keyStorePassword", 'your-password-here');

它们将在系统范围内使用(在这个 JVM 实例中),因此您可能希望在初始化时使用它们。

关于java - keystore 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14522799/

相关文章:

java - 当用java访问网页时,我的php页面的主体变成关于javascript的错误

Java compareTo 方法基础

java - Android 6 棉花糖 ListView 。使用运行时权限启动 Activity

ssl - 如何为 Apache2 和 Jetty 服务器启用 SSL

c# - 在 C# 中使用参数执行命令行 .exe

ssl - 从 csr 文件转换/生成 keystore 文件?

java - HQL 子查询中的 NPE

security - 这会使 SSL 加密易受攻击吗?

java - BrowserMob 代理 + Apache HttpClient : Receiving javax.net.ssl.SSLHandshakeException

SSL 证书在 SOAPUI 中有效,但在 Jmeter2.13 中无效