2016-09-05 2 views
0

Окружающая среда: Ubuntu 14,04, PHP 5.5.9, MYSQL 5.6.30Как исправить ошибку mysqli :: real_connect(): Ошибка SSL "?

Время от времени я получаю ошибку

mysqli::real_connect(): SSL operation failed with code 1. OpenSSL

Ошибка сообщение:

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

Front/nginx находится на одном сервере, а mysql находится на другом сервере.

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

Пример:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$this->objMySqli = mysqli_init(); 
mysqli_options ($this->objMySqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 

$this->objMySqli->ssl_set($this->SslKey, $this->SslCertificate, $this->SslCACertificate, null, null); 

$link = $this->objMySqli->real_connect($this->Server, $this->Username, $this->Password, $this->Database, $this->Port);  

if (!$link) { 
    throw new QMySqliDatabaseException("Unable to connect to Database", -1, null); 
} 

SSL Cipher:

enter image description here

Это не будет работать на этой линии:

$link = $this->objMySqli->real_connect($this->Server, $this->Username, $this->Password, $this->Database, $this->Port); 
+0

Вы разрешили шифрование SSL2 и SSL3 на своем сервере? Разрешает ли сервер SSL2? –

+0

Вы используете PDO или прямой mysqli :: real_connect()? Если вы используете PDO, попробуйте использовать прямой вызов, он должен дать более полезные ошибки ... – MarcoS

+0

@MarcoS - добавлен мой скрипт – CroiOS

ответ

0

Это проблема с mysql версии 5.6.30, Я обновил до 5.6.32, и теперь эта ошибка больше не происходит.

0

Модернизация не исправила мою проблему, но я нашел новое решение.

TLDR; Convert your PKCS#8 format keys to PKCS#1 format keys

openssl rsa -in example.com.server.key.pem -out example.com.server.key.pkcs1.pem 

я столкнулся с этими ошибками:

MySQL Bug 71271

MySQL Bug 64870

По существу, если ваш секретный ключ находится в PKCS формате # 8 вместо PKCS формате # 1, MySQL не будет " найти "секретный ключ.

Много переполнению стека ответы говорят переименовывать колонтитулы включить RSA в заголовке и нижний колонтитулы, как так:

С (PKCS # 8 формат)

-----BEGIN PRIVATE KEY----- 
... 
-----END PRIVATE KEY----- 

К (PKCS # 1 формат)

-----BEGIN RSA PRIVATE KEY----- 
... 
-----END RSA PRIVATE KEY----- 

Однако это не изменяет данные секретного ключа между верхним и нижним колонтитулом.При использовании моего PKCS # 8 ключа формата с измененными колонтитулами, никакой ошибки не произошла при запуске MySQL, но когда я попытался связаться с MySQLi я получил

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 

Превращая свои приватные ключи PKCS формат # 1, ключи работали, и я мог соединиться отлично:

openssl rsa -in example.com.server.key.pem -out example.com.server.key.pkcs1.pem 

Обратите внимание, что новые версии OpenSSL, по крайней мере 1.0.2j (что я использую) выход PKCS # 8 клавиша при использовании

openssl req -config "openssl.cnf" \ 
-keyout "private/example.com.server.key.pem" -new -sha256 \ 
-days 3652 -nodes -out "csr/example.com.server.csr.pem" 

но используя сиситемы варианты аренды могут выводить ключи PKCS # 1 (возможно, -newkey rsa:2048, я не тестировал). Это объясняет, почему только некоторые люди испытывают это при использовании закрытых ключей openssl.

Эта проблема возникла из-за меня в MySQL 5.6.17 и 5.7.14, поэтому кажется, что ошибки не исправлены.