ECDSA cert and TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8

Jiho Park(박지호) <[email protected]>
Newsgroups gmane.comp.encryption.bouncy-castle.devel
Message-ID <CACE8fQSnE8HmAJQYA9hL=ocatSkOs8dW4acZDT1c-=5wX=OL0A@mail.gmail.com>
Hello, everyone.
first of all, thank you for .

I'm trying to test HTTPS communication with ECDSA certificate and
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8.
But it fails to handshake


Server-side)
- Java 8, Spring Boot(embedded tomcat)
- bcprov-jdk15on-159, bctls-jdk15on-159
- add BC Provider, BCJSSE Provider at the first of provider list
- Enabled Ciphers : TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,
TLS_RSA_WITH_AES_256_CBC_SHA256
- set TLS related properties in application.properties


Client-side)
- Java 8, Spring Framework RestTemplate with HttpClient
- bcprov-jdk15on-159, bctls-jdk15on-159
- add BC Provider, BCJSSE Provider at the first of provider list
- Enabled Ciphers : TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,
TLS_RSA_WITH_AES_256_CBC_SHA256
- set TLS related properties with HttpClient and SSLConnectionSocketFactory


When I test with RSA Server Certificate, It works well with selected cipher
"TLS_RSA_WITH_AES_256_CBC_SHA256"
(RSA cert is created : keytool -genkeypair -alias server -keyalg RSA
-keystore server.jks)


But with ECDSA Server Certificate, It fails to handshake;
org.bouncycastle.tls.TlsFatalAlert: handshake_failure(40)
(ECDSA cert is created : keytool -genkeypair -alias server -keyalg EC
-keystore server.jks)


I added debug code to BC Tls library for debugging this issue.
The cause is "finding alias with keyType ECDHE_ECDSA return null"
Does EC private key or ECDSA certificate need additional settings?
RSA server cert work well with same configuration.


Here is the logs with ECDSA Server certificate settings
--------------------------------------------------------------------------------

AbstractTlsServer.getSelectedCipherSuite : print offeredCipherSuites
   Offered Ciphers : 0xc0ae
   Offered Ciphers : 0x3d
   Offered Ciphers : 0xff
AbstractTlsServer.getSelectedCipherSuite : checking cipherSuites - cipher
0xc0ae
ProvTlsServer.selectCipherSuite start
ProvTlsServer.selectCredentials :
KeyManager=sun.security.ssl.SunX509KeyManagerImpl@3c898997
ProvTlsServer.selectCredentials : KeyType=ECDHE_ECDSA
ProvTlsServer.selectCredentials : alias=null
ProvTlsServer.selectCredentials return false : alias=null
ProvTlsServer.selectCipherSuite return false!!!!!!!!!!!!!!!
AbstractTlsServer.getSelectedCipherSuite : checking cipherSuites - cipher
0x3d
ProvTlsServer.selectCipherSuite start
ProvTlsServer.selectCredentials :
KeyManager=sun.security.ssl.SunX509KeyManagerImpl@3c898997
ProvTlsServer.selectCredentials : KeyType=RSA
ProvTlsServer.selectCredentials : alias=null
ProvTlsServer.selectCredentials return false : alias=null
ProvTlsServer.selectCipherSuite return false!!!!!!!!!!!!!!!
16:38:39 [jsse-nio-8443-exec-1]  INFO o.b.jsse.provider.ProvTlsServer
   - Server raised fatal(2) handshake_failure(40) alert: Failed to process
record
org.bouncycastle.tls.TlsFatalAlert: handshake_failure(40)
at
org.bouncycastle.tls.AbstractTlsServer.getSelectedCipherSuite(AbstractTlsServer.java:389)
at
org.bouncycastle.jsse.provider.ProvTlsServer.getSelectedCipherSuite(ProvTlsServer.java:227)
at
org.bouncycastle.tls.TlsServerProtocol.sendServerHelloMessage(TlsServerProtocol.java:669)
at
org.bouncycastle.tls.TlsServerProtocol.handleHandshakeMessage(TlsServerProtocol.java:134)
at
org.bouncycastle.tls.TlsProtocol.processHandshakeQueue(TlsProtocol.java:456)
at org.bouncycastle.tls.TlsProtocol.processRecord(TlsProtocol.java:374)
at org.bouncycastle.tls.RecordStream.readFullRecord(RecordStream.java:256)
at org.bouncycastle.tls.TlsProtocol.safeReadFullRecord(TlsProtocol.java:634)
at org.bouncycastle.tls.TlsProtocol.offerInput(TlsProtocol.java:940)
at
org.bouncycastle.jsse.provider.ProvSSLEngine.unwrap(ProvSSLEngine.java:354)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at
org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:475)
at
org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1445)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)



-------------------------------------------------------------------------------------
ECDSA cert is :

chain [0] =   [0]         Version: 3
         SerialNumber: 1562626989
             IssuerDN:
C=Unknown,ST=Unknown,L=Unknown,O=Unknown,OU=Unknown,CN=Agg Client(EC)
           Start Date: Mon Jun 18 13:37:59 KST 2018
           Final Date: Sun Sep 16 13:37:59 KST 2018
            SubjectDN:
C=Unknown,ST=Unknown,L=Unknown,O=Unknown,OU=Unknown,CN=Agg Client(EC)
           Public Key: EC Public Key
[51:73:48:da:9e:ee:f8:5b:48:f7:ac:0f:e9:69:93:2a:eb:ce:ca:1a]
            X:
6b410d4187471cb63c53eb46ab2bda74650db30a5f46f5da8e55274ca9c3eb4e
            Y:
1cb943b0941329a038e249cae506380a0547b275ad5b09cd39b5a86aa245830f

  Signature Algorithm: SHA256WITHECDSA
            Signature: 3045022059054742594bbd9fdf4c8481fd3c8e89
                       49da0d4b4797afb16a26134cecb63587022100d6
                       38046b31b5d039d0a79ad5eb69b9087f9b4e0ff5
                       15a76d4206836e838a41fd
       Extensions:
                       critical(false) 2.5.29.14 value = DER Octet
String[20]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.