0

我采用了以下示例并移动了代码,以便更好地模拟实际的客户端和实际的服务器

  • 服务器只能访问信任库文件
  • 客户端只能访问客户端密钥库文件

至少在 TLS1v2 中,它是这样工作的。在我重新编写代码后,有两个 SSL 上下文(一个服务器端和一个客户端),它爆炸并且不起作用

 javax.net.ssl.SSLHandshakeException: No available authentication scheme

我重新编写的代码现在是这样的

public SSLEngineSimpleDemo() throws Exception {

    File baseWorkingDir = FileFactory.getBaseWorkingDir();
    File keyStoreFile = FileFactory.newFile(baseWorkingDir, "src/test/resources/client2.keystore");

    char[] passphrase = "123456".toCharArray();

    KeyStore ks = KeyStore.getInstance("JKS");
    ks.load(new FileInputStream(keyStoreFile), passphrase);
    clientCtx = SSLContext.getInstance("TLS");

    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    kmf.init(ks, passphrase);
    clientCtx.init(kmf.getKeyManagers(), null, null);

    File trustStoreFile = FileFactory.newFile(baseWorkingDir, "src/test/resources/server2.keystore");

    KeyStore ts = KeyStore.getInstance("JKS");
    ts.load(new FileInputStream(trustStoreFile), passphrase);
    serverCtx = SSLContext.getInstance("TLS");

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    tmf.init(ts);
    serverCtx.init(null, tmf.getTrustManagers(), null);
}

我有这样的代码可以在 TLS1v2 上运行,所以我不确定为什么在 TLS1v3 中,这不再工作了。

  • 我在这里有什么问题?
  • 我的假设是否正确,因为 trustStoreFile 是我的私有服务器密钥?
  • 我的假设是否正确,因为 clientStoreFile 是我的公钥?
  • 我的假设是否正确,因为服务器只需要私钥?
  • 我的假设是否正确,因为客户端只需要公钥?

Java版本:/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk

4

2 回答 2

0

天哪,我是个白痴。问题是我的密钥生成脚本命名了第一件事 client2.keystore(这是 server2.keystore)。

一旦我修复脚本以将私钥/公钥par生成到server2.keystore(而不是client2.keystore的错误),导出,将公钥导入client2.keystore,一切正常。

我应该提供那个脚本:(。

于 2021-08-18T01:01:49.247 回答
-1

javax.net.ssl.SSLHandshakeException: No available authentication scheme当运行您的服务器的操作系统不支持 JVM 正在寻找的身份验证方法时,就会发生异常。

此外,可以在实例化 SSL 上下文时显式指定 TLSv1.3。

改变你clientCtx = SSLContext.getInstance("TLS");clientCtx = SSLContext.getInstance("TLSv1.3");

serverCtx = SSLContext.getInstance("TLS");serverCtx = SSLContext.getInstance("TLSv1.3");

注意: SSLContext 支持更多选项,例如 SSLv3,TLSv1,TLSv1.1,TLSv1.2

于 2021-08-18T00:45:46.943 回答