androidsslsslengine

Why client sending Close Notify after successful handshaking?


I am using SSLEngine to communicate an SSL client over USB

Handshaking pass correctly and i start getting encrypted data, but when i transfer a specific data, it sends me a "Close Notify" message (15 03 03..) and i can't figure out why??!!

The specific message, should have no issue, i confirmed it many times

I triple checked certificate and private key, they are the correct ones (and not compromised or anything)

I thought perhaps the client trying to ReHandshake but as far as i understand, ReHandshaking should start with by a Client Hello and not Close Notify (correct?)

This is the current settings

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);

Also, i created the pfx file using the next link. I know that the client has the root certificate pinned so i do not need to make the chain, but i tried it both ways

enter link description here

Is there anything wrong with the code or the command to make the pfx? Else, what can cause a Close Notify?

Again reminding that the handshake passed and the Notify Close after at least 20 messages encrypted/decrypted correctly.


Solution

  • Close Notify is simply a normal TLS connection shutdown. Thus something you've send made the server close the connection. This has nothing to do with TLS itself. Maybe you've implement the (unknown) application protocol in the wrong way, failed to authenticate properly or maybe explicitly issued an application command to close the connection.