powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SSL connection to mysql
21 сообщений из 21, страница 1 из 1
SSL connection to mysql
    #38644087
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 3 файла: SSL CA File, SSL CERT File, SSL Key File.
Нужно подключиться к mysql серверу по ssl, как это делается в MySQL workbench, указывая эти файлы.

Т.е. надо как-то методу DriverManager.getConnection() передать эти файлы.

Отмечу, что коннектов может быть много к разным серверам, и у каждого будут свои сертификаты, поэтому установка глобальных свойств

Код: java
1.
System.setProperty("javax.net.ssl.keyStore","/CERTIFICATES/mysql4/cacert.pem");  



свойств не подходит.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38644232
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
keyStore свойство оно для Java Key Store - хранилище ключей - там может быть много разных ключей
pem файл это просто ключ сохраненный в виде файла в определенном формате

У вас даже не работает ваш вариант. Именно поэтому он не подходит, а не потому что у вас много соединений.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38645063
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда я, наверно, не туда копаю, может есть пример у кого?
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38645081
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В RTFM подробно расписано
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-using-ssl.html
Гугл даёт массу примеров
https://www.google.com/search?q=MySQL JDBC SSL

Чего именно не хватает?
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38645729
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Here's my article for SSL TomCat connection

http://vyatkins.wordpress.com/2013/11/19/java-base-ssl-connection-to-tomcat-with-server-and-client-certifications/

Please do not hesitate to ask if any questions.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646131
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaPlease do not hesitate to ask if any questions.
I got one: "Why would you give irrelevant links in this thread?"
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646369
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал сделать как описано в
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-using-ssl.html

Падает ошибка
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

Затем сделал по шагам, которые указаны в комментариях ниже, эти шаги больше похоже на правду и задействуются все 3 описанных файла:

a- add Certificate Authority to a new TrustStore
keytool -import -alias mysqlCACert -file ca-cert.pem -keystore truststore -storepass pass_word -deststoretype JKS

b- Converting openssl created client certificate to accepted java keystore PKCS12
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -certfile client-cert.pem -name "Name" -out client.p12

a- Add new PKCS12 certificate to key store JKS type
keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -destkeystore keystore -storepass pass_word -deststoretype JKS


После выполнения этих команд в java home создались два файла keystore, truststore.

Затем пытаемся подключиться к нужному серверу mysql.

Код: java
1.
2.
3.
4.
5.
6.
7.
System.setProperty("javax.net.ssl.keyStore", "c:\\Program Files\\Java\\jdk1.7.0_51\\bin\\keystore");
System.setProperty("javax.net.ssl.keyStorePassword","pass_word );
System.setProperty("javax.net.ssl.trustStore", "c:\\Program Files\\Java\\jdk1.7.0_51\\bin\\truststore");
System.setProperty("javax.net.ssl.trustStorePassword","pass_word");

...
Driver.getConnection(<url>)



=>javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646379
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProПадает ошибка
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception :

Ну, написано, же падает из-за другого исключения.

xPro=>javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
Это находится в cause первого исключения?
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646384
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНу, написано, же падает из-за другого исключения.


Сори, исходная ошибка была
MESSAGE: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

BlazkowiczЭто находится в cause первого исключения?


Да, это текст исходной ошибки.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646402
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторjavax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
Вот это немного не понятно, потому что ругается на "server". Это значит что клиентский сертификат был ошибочно использован на сервере. А сервер тут MySQL. Если была аналогичная ошибка с "SSL client" в конце, было бы понятнее.

авторMESSAGE: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

Перестаньте вырезать куски, которые, как вам кажется, самые важные. Вываливаете сюда исключения целиком, включая stacktrace и вложеные исключения.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646423
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ok, вот полный стек последней ошибки (SSLHandshakeException)

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

javax.net.ssl.SSLHandshakeException
MESSAGE: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server

STACKTRACE:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:72)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at capsidea.Schema.getUserDataConnection(Schema.java:310)
at capsidea.SourceService.createSchema(SourceService.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at capsidea.WebService.processRequest(WebService.java:155)
at capsidea.WebService.doPost(WebService.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
at sun.security.validator.EndEntityChecker.checkTLSServer(EndEntityChecker.java:297)
at sun.security.validator.EndEntityChecker.check(EndEntityChecker.java:141)
at sun.security.validator.Validator.validate(Validator.java:264)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 44 more


** END NESTED EXCEPTION **



Last packet sent to the server was 239 ms ago.

STACKTRACE:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

javax.net.ssl.SSLHandshakeException
MESSAGE: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server

STACKTRACE:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:72)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at capsidea.Schema.getUserDataConnection(Schema.java:310)
at capsidea.SourceService.createSchema(SourceService.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at capsidea.WebService.processRequest(WebService.java:155)
at capsidea.WebService.doPost(WebService.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server
at sun.security.validator.EndEntityChecker.checkTLSServer(EndEntityChecker.java:297)
at sun.security.validator.EndEntityChecker.check(EndEntityChecker.java:141)
at sun.security.validator.Validator.validate(Validator.java:264)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 44 more


** END NESTED EXCEPTION **



Last packet sent to the server was 239 ms ago.
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:87)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at capsidea.Schema.getUserDataConnection(Schema.java:310)
at capsidea.SourceService.createSchema(SourceService.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at capsidea.WebService.processRequest(WebService.java:155)
at capsidea.WebService.doPost(WebService.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)


** END NESTED EXCEPTION **



Last packet sent to the server was 239 ms ago.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646435
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Больше интересует "NoSuchAlgorithmException", в котором окажется что вашему процессу нельзя читать из Program Files.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646469
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы пробовли подсоединиться к mysql через SSL не из Java? Возможно вы в MySQL не тот сертификат установили?
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646482
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Да, через MySQL Workbench с указанием указанных файлов всё ok.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38646906
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProBlazkowicz,

Да, через MySQL Workbench с указанием указанных файлов всё ok.

Попробуйте еще добавить дебаг для SSL

Код: java
1.
System.setProperty("javax.net.debug", "ssl,handshake");



Там дается подробный лог всех задействованных сертификатов я этот момент подробно разжевываю в статье.

типо так будет

Example log
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
keyStore is : src/main/resources/local/localhost_client.p12
keyStore type is : PKCS12
keyStore provider is : 
init keystore
init keymanager of type SunX509
***
found key for : localhost_client
chain [0] = [
[
  Version: V3
  Subject: CN=localhost_client, OU=Unit, O=Organization, L=City, ST=State, C=US
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
 
  Key:  Sun RSA public key, 1024 bits
  modulus: 140194258804626507561849035834394797195591361321452252320716681921944324863474390231976638686061895510815124754173859058430280836341502425688116998441920651250132599467068392390284759888097731074155553868818816634643761691919001306346353465937316948852687407668424277201495832822886494315261776807551621850359
  public exponent: 65537
  Validity: [From: Fri Nov 15 09:27:27 PST 2013,
               To: Thu Feb 13 09:27:27 PST 2014]
  Issuer: CN=localhost_client, OU=Unit, O=Organization, L=City, ST=State, C=US
  SerialNumber: [    5286597f]
 
]
  Algorithm: [SHA1withRSA]
  Signature:
0000: C1 94 B2 3B 30 65 B7 98   4B 1C 33 29 A3 78 AB E9  ...;0e..K.3).x..
0010: ED FF 99 35 32 F3 18 5D   57 B5 53 1D 16 29 07 08  ...52..]W.S..)..
0020: 00 55 5B B4 A1 9C 55 5A   B2 95 78 02 33 70 61 C3  .U[...UZ..x.3pa.
0030: 06 2E E0 FC 2D D9 5E 2B   D8 70 93 2C B5 A1 DE 8D  ....-.^+.p.,....
0040: D4 AB 6F 50 01 24 A4 C2   AC FD 28 10 3B B3 E9 B5  ..oP.$....(.;...
0050: AC FF 8D 28 36 17 52 CD   70 79 44 9B 8A DB EA 42  ...(6.R.pyD....B
0060: 96 05 46 03 71 78 95 DF   26 B0 74 CE 51 3D BA 12  ..F.qx..&.t.Q=..
0070: 31 27 06 74 CE D2 15 C6   E8 F9 E3 F7 C2 E7 4A 54  1'.t..........JT
 
]
***
trustStore is: src/main/resources/local/localhost_client_trust_store.jks
trustStore type is : jks
trustStore provider is : 
init truststore
adding as trusted cert:
  Subject: CN=localhost, OU=Unit, O=Organization, L=City, ST=State, C=US
  Issuer:  CN=localhost, OU=Unit, O=Organization, L=City, ST=State, C=US
  Algorithm: RSA; Serial number: 0x5286597f
  Valid from Fri Nov 15 09:27:27 PST 2013 until Thu Feb 13 09:27:
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38647136
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл ещё что нужно включить тип store
System.setProperty("javax.net.ssl.keyStoreType","pkcs12");
System.setProperty("javax.net.ssl.trustStoreType","pkcs12");

Теперь выдаётся другая ошибка:


com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

STACKTRACE:

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:198)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:218)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:65)
at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:3982)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1293)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at Schema.getUserDataConnection(Schema.java:307)
at SourceService.createSchema(SourceService.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at capsidea.WebService.processRequest(WebService.java:155)
at capsidea.WebService.doPost(WebService.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
at java.security.Provider$Service.newInstance(Provider.java:1262)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:97)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:121)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:61)
... 36 more
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
at sun.security.util.DerValue.init(DerValue.java:365)
at sun.security.util.DerValue.<init>(DerValue.java:320)
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1220)
at java.security.KeyStore.load(KeyStore.java:1214)
at sun.security.ssl.SSLContextImpl$DefaultSSLContext.getDefaultKeyManager(SSLContextImpl.java:610)
at sun.security.ssl.SSLContextImpl$DefaultSSLContext.<init>(SSLContextImpl.java:495)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at java.security.Provider$Service.newInstance(Provider.java:1238)
... 42 more


** END NESTED EXCEPTION **



Лог:

trustStore is: c:\Work\truststore
trustStore type is : pkcs12
trustStore provider is :
init truststore
SunX509: skip default keystore: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
trigger seeding of SecureRandom
done seeding SecureRandom

keyStore is : c:\Work\keystore
keyStore type is : pkcs12
keyStore provider is :
init keystore
default context init failed: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38647145
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProНашёл ещё что нужно включить тип store
System.setProperty("javax.net.ssl.keyStoreType","pkcs12");
System.setProperty("javax.net.ssl.trustStoreType","pkcs12");

Совсем не то. У вас JKS, а вы его пытаетесь прочитать как pkcs12.
В предыдущей версии сертификаты нормально загружались и JKS, а ошибка была в самих сертификатах.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38647161
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Да, сконвертировал сертификаты из p12 в jks и заимпортировал в keystore
Стала снова падать ошибка: sun.security.validator.ValidatorException: Netscape cert type does not permit use for SSL server, иногда ещё вылезала "javax.net.ssl.SSLException: Unsupported record version Unknown-0.0" и наткнулся на http://bugs.mysql.com/bug.php?id=66173

После этого я обновил MySQL driver с 5.0.8 на 5.1.30 и оно наконец-то заработало!

Резюмируя, делать надо примерно так (поправьте если что):
Имеем 3 файла SSL CA File, SSL CERT File, SSL Key File:

1.Добавляем публичный CA файл в trustStore
keytool -import -alias mysqlCACert -file ca-cert.pem -keystore truststore -storepass pass_word -deststoretype JKS

2. Через openssl создаём p12 контейнер из клиентского ключа и сертификата CERT FILE
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "Name" -out client.p12

3. Конвертируем p12 в jsk
keytool -importkeystore -destkeystore client.jks -srckeystore client.p12 -srcstoretype pkcs12

4. Импортируем полученный jsk в keystore
keytool -importkeystore -srckeystore client.jsk -srcstoretype jks -destkeystore keystore -storepass pass_word -deststoretype JKS


java code

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//тут нужны права на папку процессу tomcat.
System.setProperty("javax.net.ssl.keyStore", "c:\\Program Files\\Java\\jdk1.7.0_51\\bin\\keystore");
System.setProperty("javax.net.ssl.keyStorePassword","pass_word");
System.setProperty("javax.net.ssl.trustStore", "c:\\Program Files\\Java\\jdk1.7.0_51\\bin\\truststore");
System.setProperty("javax.net.ssl.trustStorePassword","pass_word");

Properties info = new Properties();
info.setProperty("user", User);
info.setProperty("password", Password);
info.setProperty("useSSL", "true");
info.setProperty("requireSSL", "true");
info.setProperty("verifyServerCertificate", "false");

DriverManager.getConnection("url", info.getProperies());



Если число шагов можно уменьшить подскажите плз.
Теперь буду избавляться от необходимости использовать System.setProperty, и как-то указывать keyStore в url подключения к бд.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38647200
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProТеперь буду избавляться от необходимости использовать System.setProperty, и как-то указывать keyStore в url подключения к бд.
Вы снова путаете. Вам не нужно указывать keystore для каждого соединения. Вам нужно в один keystore заимпортировать ключи для всех ваших соединений. А SSL уже сам разберется какой сертификат при каком соединении ему использовтаь.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38647204
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xPro
Если число шагов можно уменьшить подскажите плз.

Точного рецепта не дам, но, возможно, если взять KeyTool IUI
https://code.google.com/p/keytool-iui/
то можно будет проще импортировать ключи и сертификаты не конвертируя их в разные форматы.
...
Рейтинг: 0 / 0
SSL connection to mysql
    #38649718
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВы снова путаете. Вам не нужно указывать keystore для каждого соединения. Вам нужно в один keystore заимпортировать ключи для всех ваших соединений. А SSL уже сам разберется какой сертификат при каком соединении ему использовтаь.

У меня будет много разных серверов MySQL, postgresql, у каждого будут свои сертификаты. Пользователь создаёт через ui подключение к своей базе и серверу. И для каждого такого сервера я буду создавать отдельный jks файл, а для каждого соединения для этого сервера его переиспользовать. Так явно удобнее (для меня уж точно) управлять всеми метаданными подключений.


Вот более простой вариант через keytool

1. Через openssl создаём p12 контейнер из клиентского ключа и сертификата CERT FILE
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "Name" -out client.p12


2. Импортируем полученный p12 фйал в виде jsk файла в keystore
keytool -importkeystore -destkeystore c:/Work/client.jks -deststoretype jks -srckeystore client.p12 -srcstoretype pkcs12


А вот собственно окончательный вариант создания java key store (jsk) из Java.
(Используется http://www.bouncycastle.org/latest_releases.html, нужны bcprov-jdk15on-150.jar и bcpkix-jdk15on-150.jar)


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
public class SSLHelper
{

	public static void createJSK(String certStr, String keyStr, String destFullFileName, String keypass) throws Exception
	{
		//1. создаём key store в виде .jks файла
		KeyStore keystore = KeyStore.getInstance("JKS", "SUN");
		keystore.load(null, null);

		CertificateFactory cf = CertificateFactory.getInstance("X.509");

		
		String tempFile = destFullFileName.replace(".jks", ".pem");

		try
		{
                        //2. импортируем клиентский сертификат
			FileOutputStream certTemp = new FileOutputStream(tempFile);
			certTemp.write(certStr.getBytes());
			certTemp.flush();
			certTemp.close();

			FileInputStream fis = new FileInputStream(tempFile);

			BufferedInputStream bis = new BufferedInputStream(fis);

			Certificate cert = cf.generateCertificate(bis);
			keystore.setCertificateEntry("client_cert", cert);
			java.security.cert.Certificate[] chain = {cert};

			//3. импортируем клиентский ключ
			Security.addProvider(new BouncyCastleProvider());
			PemObject pem = new PEMParser(new StringReader(keyStr)).readPemObject();


			PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(pem.getContent());
			KeyFactory rSAKeyFactory = KeyFactory.getInstance("RSA");
			PrivateKey privateKey = rSAKeyFactory.generatePrivate(spec);

			keystore.setEntry("client_key", new KeyStore.PrivateKeyEntry(privateKey, chain), new KeyStore.PasswordProtection(keypass.toCharArray()));

			//4. сохраняем на диск
			FileOutputStream keyStoreOutputStream = new FileOutputStream(destFullFileName);
			keystore.store(keyStoreOutputStream, keypass.toCharArray());
			keyStoreOutputStream.close();

			fis.close();

		}
		finally
		{
			(new File(tempFile)).delete();
		}
	}
}



Само подключение:



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
String filejks = "c:/Work/client.jks";
SSLHelper.createJSK(<строка клиентского сертификата>, <строка клиентского ключа>, filejks , "bla");

Properties info = new Properties();
info.setProperty("useSSL", "true");
info.setProperty("requireSSL", "true");
info.setProperty("verifyServerCertificate", "false");
info.setProperty("clientCertificateKeyStoreUrl", "file:///" + filejks);
info.setProperty("clientCertificateKeyStorePassword", "bla");
DriverManager.getConnection("url", info.getProperies());



Всем спасибо за помощь.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / SSL connection to mysql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]