Spec-Zone .ru
спецификации, руководства, описания, API
|
SSL в MySQL, Connector/J, шифрует все данные (кроме начального квитирования) между драйвером JDBC и сервером. Потеря производительности для того, чтобы включить SSL является увеличением во время обработки запроса между 35 % и 50 %, в зависимости от размера запроса, и объемом данных, который это возвращает.
Поскольку SSL поддерживает к работе, у Вас должно быть следующее:
JDK, который включает JSSE (Расширение Защищенных сокетов Java), как JDK 1.4.1 или
более новый. SSL в настоящий момент не работает с JDK, что можно добавить JSSE к, как JDK-1.2.x или
JDK-1.3.x из-за следующей ошибки JSSE:
Сервер MySQL, который поддерживает SSL и был скомпилирован и сконфигурирован, чтобы сделать так, который является MySQL 4.0.4 или позже. Для получения дополнительной информации см. Раздел 6.3.9.2, "Конфигурируя MySQL для SSL".
Клиентский сертификат (покрытый позже этим разделом)
Системные работы через два файла базы доверенных сертификатов Java, один файл содержит информацию о сертификате
для сервера (truststore
в примерах ниже). Другой файл содержит сертификат для
клиента (keystore
в примерах ниже). Все файлы базы доверенных сертификатов Java
являются защищёнными паролем, предоставляя подходящий пароль к keytool, когда Вы создаете файлы. Вы нуждаетесь в именах файлов
и связанных паролях, чтобы создать соединение SSL.
Вы должны будете сначала импортировать Сертификат CA сервера MySQL в базу доверенных сертификатов Java.
Демонстрационный Сертификат CA сервера MySQL располагается в SSL
подкаталог
исходного распределения MySQL. Это - то, что SSL будет использовать, чтобы определить, связываетесь ли Вы с
безопасным сервером MySQL. Альтернативно, используйте Сертификат CA, который Вы генерировали или были
предоставлены Вашим провайдером SSL.
Использовать keytool Java, чтобы создать базу доверенных
сертификатов в текущем каталоге, и импортировать сертификат CA сервера (cacert.pem
),
можно сделать следующий (предполагающий, что keytool находится в
Вашем пути. keytool обычно располагается в bin
подкаталог Вашего JDK или JRE):
shell> keytool -import -alias mysqlServerCACert \ -file cacert.pem -keystore truststore
Введите пароль когда запрошено keystore файл. Взаимодействие с keytool похоже на это:
Enter keystore password: *********Owner: EMAILADDRESS=walrus@example.com, CN=Walrus, O=MySQL AB, L=Orenburg, ST=Some-State, C=RUIssuer: EMAILADDRESS=walrus@example.com, CN=Walrus, O=MySQL AB, L=Orenburg, ST=Some-State, C=RUSerial number: 0Valid from: Fri Aug 02 16:55:53 CDT 2002 until: Sat Aug 02 16:55:53 CDT 2003Certificate fingerprints: MD5: 61:91:A0:F2:03:07:61:7A:81:38:66:DA:19:C4:8D:AB SHA1: 25:77:41:05:D5:AD:99:8C:14:8C:CA:68:9C:2F:B8:89:C3:34:4D:6CTrust this certificate? [no]: yesCertificate was added to keystore
У Вас тогда есть две опции: или импортируйте клиентский сертификат, который соответствует, CA сертифицировали Вас только импортированный, или создают новый клиентский сертификат.
Импорт существующего сертификата требует, чтобы сертификат был в формате DER. Можно использовать openssl, чтобы преобразовать существующий сертификат в новый формат. Например:
shell> openssl x509 -outform DER -in client-cert.pem -out client.cert
Теперь импортируйте преобразованный сертификат в свой keystore, использующий keytool:
shell> keytool -import -file client.cert -keystore keystore -alias mysqlClientCertificate
Чтобы генерировать Ваш собственный клиентский сертификат, используйте keytool, чтобы создать подходящий сертификат и добавить это к keystore
файл:
shell> keytool -genkey -keyalg rsa \ -alias mysqlClientCertificate -keystore keystore
Keytool запросит Вас следующую информацию, и создаст названный keystore keystore
в
текущем каталоге.
Ответьте информацией, которая является подходящей для Вашей ситуации:
Enter keystore password: *********What is your first and last name? [Unknown]: MatthewsWhat is the name of your organizational unit? [Unknown]: Software DevelopmentWhat is the name of your organization? [Unknown]: MySQL ABWhat is the name of your City or Locality? [Unknown]: FlossmoorWhat is the name of your State or Province? [Unknown]: ILWhat is the two-letter country code for this unit? [Unknown]: USIs <CN=Matthews, OU=Software Development, O=MySQL AB, L=Flossmoor, ST=IL, C=US> correct? [no]: yEnter key password for <mysqlClientCertificate> (RETURN if same as keystore password):
Наконец, чтобы заставить JSSE использовать keystore и базу доверенных сертификатов, которую Вы генерировали, Вы
должны установить следующие системные свойства, когда Вы запускаете свою JVM, заменяя path_to_keystore_file
с полным путем к keystore файлу Вы создали,
path_to_truststore_file
с путем к файлу базы доверенных сертификатов
Вы создали, и использование соответствующих значений пароля для каждого свойства. Можно сделать это любой на
командной строке:
-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=path_to_truststore_file
-Djavax.net.ssl.trustStorePassword=password
Или можно установить значения непосредственно в пределах приложения:
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file
");System.setProperty("javax.net.ssl.keyStorePassword","password
");System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file
");System.setProperty("javax.net.ssl.trustStorePassword","password
");
Вы должны будете также установить useSSL
к true
в
Ваших параметрах соединения для MySQL, Connector/J, любой, добавляя useSSL=true
к
Вашему URL, или устанавливая свойство useSSL
к true
в
java.util.Properties
экземпляр Вы передаете к DriverManager.getConnection()
.
Можно протестировать тот SSL, работает, включая JSSE, отлаживающий (как детализировано ниже), и ищите следующие ключевые события:
...*** ClientHello, v3.1RandomCookie: GMT: 1018531834 bytes = { 199, 148, 180, 215, 74, 12, » 54, 244, 0, 168, 55, 103, 215, 64, 16, 138, 225, 190, 132, 153, 2, » 217, 219, 239, 202, 19, 121, 78 }Session ID: {}Cipher Suites: { 0, 5, 0, 4, 0, 9, 0, 10, 0, 18, 0, 19, 0, 3, 0, 17 }Compression Methods: { 0 }***[write] MD5 and SHA1 hashes: len = 590000: 01 00 00 37 03 01 3D B6 90 FA C7 94 B4 D7 4A 0C ...7..=.......J.0010: 36 F4 00 A8 37 67 D7 40 10 8A E1 BE 84 99 02 D9 6...7g.@........0020: DB EF CA 13 79 4E 00 00 10 00 05 00 04 00 09 00 ....yN..........0030: 0A 00 12 00 13 00 03 00 11 01 00 ...........main, WRITE: SSL v3.1 Handshake, length = 59main, READ: SSL v3.1 Handshake, length = 74*** ServerHello, v3.1RandomCookie: GMT: 1018577560 bytes = { 116, 50, 4, 103, 25, 100, 58, » 202, 79, 185, 178, 100, 215, 66, 254, 21, 83, 187, 190, 42, 170, 3, » 132, 110, 82, 148, 160, 92 }Session ID: {163, 227, 84, 53, 81, 127, 252, 254, 178, 179, 68, 63, » 182, 158, 30, 11, 150, 79, 170, 76, 255, 92, 15, 226, 24, 17, 177, » 219, 158, 177, 187, 143}Cipher Suite: { 0, 5 }Compression Method: 0***%% Created: [Session-1, SSL_RSA_WITH_RC4_128_SHA]** SSL_RSA_WITH_RC4_128_SHA[read] MD5 and SHA1 hashes: len = 740000: 02 00 00 46 03 01 3D B6 43 98 74 32 04 67 19 64 ...F..=.C.t2.g.d0010: 3A CA 4F B9 B2 64 D7 42 FE 15 53 BB BE 2A AA 03 :.O..d.B..S..*..0020: 84 6E 52 94 A0 5C 20 A3 E3 54 35 51 7F FC FE B2 .nR..\ ..T5Q....0030: B3 44 3F B6 9E 1E 0B 96 4F AA 4C FF 5C 0F E2 18 .D?.....O.L.\...0040: 11 B1 DB 9E B1 BB 8F 00 05 00 ..........main, READ: SSL v3.1 Handshake, length = 1712...
JSSE обеспечивает отладку (к stdout
) когда Вы устанавливаете следующее системное
свойство: -Djavax.net.debug=all
Это скажет Вам, какой keystores и базы доверенных
сертификатов используются, так же как что продолжается во время квитирования SSL и обмена сертификата. Это будет
полезно, пытаясь определить то, что не работает, пытаясь заставить соединение SSL происходить.