2015-08-05 3 views
17

Я пытаюсь настроить SSL-соединение с базой данных MySQL, размещенной через Amazon RDS. Я смущен, как подключиться.Как подключиться к Amazon RDS через SSL?

Согласно documentation от Amazon, мне нужно загрузить сертификат CA под названием «rds-ca-2015-root.pem» и использовать его в моем SSL-соединении. Я установил пользователя базы данных, с которым я подключаюсь, чтобы требовать SSL.

В PHP, я включать код, приведенный ниже, чтобы инициировать соединение:

$mysqli = mysqli_init(); 
mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 
$mysqli->ssl_set(NULL, NULL, "/path/to/pem", NULL, NULL); 
$mysqli->real_connect("host", "username", "password", "name", 3306, NULL, MYSQLI_CLIENT_SSL); 

Однако, независимо от того, какой путь я указать в качестве третьего параметра в ssl_set() (даже если путь является недействительным) , SSL-соединение успешно установлено. Третий параметр просто не может быть установлен в NULL.

Я проверяю это, выполнив этот запрос: SHOW STATUS LIKE 'Ssl_cipher';. Выход проверяет, что соединение зашифровано (Ssl_cipher => AES256-SHA).

Может ли кто-нибудь объяснить мне, как это работает? Я смущен, почему соединение продолжает успешно работать, когда путь неверен. Как проверяется сервер RDS?

+1

Если вы используете это на машине Unix в зависимости от вкуса и конфигурации OpenSSL, которые вы используете, есть каталог, в котором хранятся сертификаты вашей системы. Openssl будет искать этот путь для соответствующего сертификата. Здесь неясно (предположим, что вы находитесь на машине unix) независимо от того, разместил ли вы свой сертификат в этом каталоге. Если вы сделали успешную связь, вы должны иметь. Вы можете получить дополнительную информацию о конкретных местах каталога здесь: http://serverfault.com/questions/62496/ssl-certificate-location-on-unix-linux – mba12

+0

Что такое PHP? – cerd

+2

Я провел довольно немного тестирования здесь (из экземпляра EC2), и похоже, что строка, которая устанавливает путь открытого ключа PEM, даже не требуется, а также строки, которые должны включать PEM из документов AWS для подключения через командную строку. Это означает, что @ mba12 является правильным в том, что сертификаты RDS должны существовать в экземпляре где-то уже и не нужно ссылаться. Если я буду ссылаться на них неправильно, тогда да, это ломается. Испытываете ли вы это снаружи AWS VPC? –

ответ

2

Документация RDS фактически объясняет, почему это происходит, и предполагает, что вы даже не нужен CA сертификат:

Amazon RDS начал обновление SSL сертификатов на всех экземпляров БД на 23 марта 2015 , но не инициировал перезагрузку экземпляров. Нет Рабочее воздействие или простои выполняются при выполнении этих обновлений , и во многих ситуациях мы выполним обновление в вашем окне обслуживания . Amazon RDS не обновит сертификат для ваших экземпляров, если вы уже выполнили обновление. Также отметьте , что Amazon RDS не обновляет сертификаты в AWS GovCloud (США) и в регионах Китая (Пекина).

Независимо от того, вручную ли вы обновили сертификат или Amazon RDS обновил сертификат, экземпляр DB должен быть перезагружен для вступления в силу нового сертификата . Вы можете решить, когда вы хотите вручную перезагрузить экземпляр DB, но вы должны обновить сертификат и перезагрузить экземпляр до старого сертификата (выстр-ча-2010) истекает 3 апреля 2015

Вы можете проверьте центр сертификации (CA), используемый вашим экземпляром DB с использованием консоли Amazon RDS. ЦС указан в разделе «Безопасность и сеть» раздела « » сведений о вашем экземпляре базы данных. Если ваш экземпляр показывает rds-ca-2015, то новый сертификат был успешно применен . Вам все равно необходимо перезагрузить экземпляр базы данных и обновить клиентское приложение, чтобы использовать новый сертификат SSL.

Если консоль RDS Amazon показывает ваш экземпляр CA как rds-ca-2010, то новый сертификат еще не был применен к вашему экземпляру базы данных . Используйте следующие инструкции, чтобы обновить сертификат SSL на экземплярах вашей базы данных.

3-й параметр по существу игнорируется клиентом. Я ставлю, установив третий параметр на NULL, нет смысла звонить mysqli::ssl_set(), если все параметры равны нулю.

Попробуйте полностью удалить этот вызов функции.

Смежные вопросы