Hi Frank,

I made some further progress by importing DeviceCert into the keystore and then 
also corrected the subject name is  the call 
securityCallback.addAcceptedSubjectDN(<subject name>).
Now I can see the SSL handshaking successful. However, I still experience 
following two issues:

1. Occasionally, the handshaking failed and got such an error during 
“ServerHello, TLSv1.2” phase.
javax.net.ssl.SSLException: Unsupported record version Unknown-26.31
        at sun.security.ssl.InputRecord.checkRecordVersion(InputRecord.java:552)
        at 
sun.security.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:113)
        at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:868)
        at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
        at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
        at org.snmp4j.transport.TLSTM$ServerThread.readMessage(TLSTM.java:1483)

2. All the requests are timed out and the response.getResponse() is always 
null. I set the timeout very high, 1 minute, and retries to 3. The same device 
can respond to snmpget command without any delay. Below is the code snippet of 
sending a request
            PDU pdu = new ScopedPDU();
            pdu.add(new VariableBinding(new OID(someOid),new 
OctetString("Hello")));
            pdu.setType(PDU.GET);
            ResponseEvent response = snmp.send(pdu, ct);
            logger.debug("Response: {} ", response.getResponse());

Any suggestion on further trouble shooting this is greatly appreciated!

Thanks a lot in advance,

Nick

On 11/13/17, 10:07 PM, "Nick Chang" <nick.ch...@serimaconsulting.com> wrote:

    Hi Frank,
    
    Thanks for your reply. I did use “System.setProperty("javax.net.debug", 
"all");” to view the handshaking traffic between the device and the client. I 
found out that I need to add the following lines to get it working with Java 
1.8 since it supports TLSv1.2 by default
    
                String[] tlsProtocols = new String[]{"TLSv1.2"};
                ((TLSTM) transport).setTlsProtocols(tlsProtocols);
    
    I currently got stuck at *** ServerHello, TLSv1.2 step, the error is
    “sun.security.validator.ValidatorException: PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find 
valid certification path to requested target”
    
    I think that it might have something to do with the incorrect setup of 
keystore and truststore that I have, but I have not been able to figure out 
what exactly I should construct them to make it pass this error.
    
    Here are certificates and keys that I have, 
    • CACert
    • DeviceCert: whose alias is “device”
    • ClientCert: whose alias is “client”
    • DeviceKey: private key of device
    • ClientKey : private key of client
    which I could connect to the device by using such a command: 
    openssl s_client -connect <Device’s IPv6 Addr>:<port no> -tls1_2 -cert 
ClientCert -CAfile CACert -key ClientKey
    
    The keystore is created by adding ClientCert,  CACert and ClientKey 
together.
    
    Then I imported the CACert and DeviceCert into Java’s default truststore in 
JAVA_HOME/lib/security/cacerts
    
    And in the client code, I have            
    
    CertifiedTarget ct = new CertifiedTarget(new OctetString(“device”));
    
    and 
    
    securityCallback.addLocalCertMapping(ct.getAddress(), “client”);
    
    Any pointer on what keystore and truststore should be and the correct way 
to construct CertifiedTarget and use securityCallback.addLocalCertMapping() is 
greatly appreciated.
    
    Thanks very much,
    
    Nick
    
    On 11/13/17, 6:34 PM, "Frank Fock" <f...@agentpp.com> wrote:
    
        Hi Nick,
        
        Do you have enabled debug logging? This should give more detailed 
information about the TLS handshake.
        
        Best regards,
        Frank
        
        
        > On 11. Nov 2017, at 17:14, Nick Chang 
<nick.ch...@serimaconsulting.com> wrote:
        > 
        > Hi Frank,
        > 
        > I am using snmp4j to build a client with functionality similar to 
that of net-snmp’s snmpget. The device is using IPv6 and configured with TLS.
        > I followed the instruction carefully given on this page, 
https://oosnmp.net/confluence/pages/viewpage.action?pageId=3834144, but the 
response always comes back with null from the device.
        > Do you have any suggestion how I should trouble this further. I am 
using JDK 1.8 and snmp4j v2.5.6
        > 
        > Thanks,
        > 
        > Nick
        > 
        > 
        > _______________________________________________
        > SNMP4J mailing list
        > SNMP4J@agentpp.org
        > https://oosnmp.net/mailman/listinfo/snmp4j
        
        
    
    

_______________________________________________
SNMP4J mailing list
SNMP4J@agentpp.org
https://oosnmp.net/mailman/listinfo/snmp4j

Reply via email to