0

我正在使用SSLEngine通过 USB 与 SSL 客户端通信

握手正确通过,我开始获取加密数据,但是当我传输特定数据时,它会向我发送“关闭通知”消息(15 03 03 ..),我不知道为什么??!!

具体消息,应该没有问题,我多次确认

我对证书和私钥进行了三次检查,它们是正确的(并且没有被泄露或任何东西)

我想也许客户试图 ReHandshake 但据我了解,ReHandshaking 应该以 a 开头Client Hello而不是Close Notify(正确?)

这是当前设置

TrustManager[] dummyTrustManager = new TrustManager[] { new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) {
    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    }
} };

KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream kstore = activity.getAssets().open("my_file.pfx");
keyStore.load(kstore, "my_pass".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory
        .getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "my_pass".toCharArray());

SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), dummyTrustManager,
        SecureRandom.getInstanceStrong());

sslEngine = ctx.createSSLEngine();
sslEngine.setUseClientMode(false);
sslEngine.setNeedClientAuth(true);

另外,我使用下一个链接创建了 pfx 文件。我知道客户端已固定根证书,因此我不需要制作链,但我尝试了两种方式

在此处输入链接描述

制作 pfx 的代码或命令有什么问题吗?否则,什么会导致Close Notify

再次提醒握手已通过并且Notify Close至少 20 条消息已正确加密/解密。

4

1 回答 1

1

Close Notify只是正常的 TLS 连接关闭。因此,您发送的内容使服务器关闭了连接。这与 TLS 本身无关。也许您以错误的方式实现(未知)应用程序协议,未能正确验证或明确发出应用程序命令以关闭连接。

于 2020-12-27T13:40:09.877 回答