Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP игнорира ssl сертификати, когато се свързва с MySql

На пръв поглед не сте задали MYSQLI_CLIENT_SSL опция за свързване.

if (!$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db', null, MYSQLI_CLIENT_SSL)) { ... }

Актуализация:
Можете да опитате да добавите $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); преди $mysqli->ssl_set() .

Също така, това работи за мен:

<?php
$pdo = new PDO('mysql:host=ip;dbname=dbname', 'username', 'password', array(
    PDO::MYSQL_ATTR_SSL_KEY    =>'/etc/mysql/ssl/client-key.pem',
    PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/client-cert.pem',
    PDO::MYSQL_ATTR_SSL_CA    =>'/etc/mysql/ssl/ca-cert.pem'
    )
);
$stmt = $pdo->query("SHOW TABLES;");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
?>

Актуализация 2: Може да получите bad handshake ако използвате парола за mysql в стар стил (16 байта дълга ). За да проверите, изпълнете следната заявка:

mysql> select length(Password) from mysql.user where User='youruser'

Ако получите 16 :

// disable old_passwords:
mysql> SET @@session.old_passwords = 0;

// update password for user used in PHP script:
mysql> SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('existingpass');

// check if we have a 41 bytes long password:
mysql> select length(Password) from mysql.user where User='youruser'

И проверете отново връзката от PHP скрипт.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. връзката с базата данни не работи в jar, но работи в eclipse

  2. mysqli multi_query, последвана от заявка

  3. ПОРЪЧАЙТЕ ПО цвят с шестнадесетичен код като критерий в MySQL

  4. Възможно ли е да се предадат новите и СТАРИТЕ таблици от тригер в процедура в MySQL?

  5. QueryException в хибернация поради апостроф