Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP bỏ qua chứng chỉ ssl khi kết nối với MySql

Thoạt nhìn, bạn đã không đặt MYSQLI_CLIENT_SSL tùy chọn kết nối.

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

Cập nhật:
Bạn có thể thử thêm các tùy chọn $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); trước $mysqli->ssl_set() .

Ngoài ra, điều này phù hợp với tôi:

<?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);
?>

Cập nhật 2: Bạn có thể nhận được bad handshake nếu bạn sử dụng mật khẩu mysql kiểu cũ ( dài 16 byte ). Để kiểm tra, hãy chạy truy vấn sau:

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

Nếu bạn nhận được 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'

Và kiểm tra lại kết nối từ tập lệnh 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. MySQL:Chọn dữ liệu từ một bảng có ngày nằm trong Tuần hiện tại và Tháng hiện tại

  2. Di chuyển một hàng từ bảng này sang bảng khác (Chèn danh sách giá trị không khớp với danh sách cột)

  3. Visual Studio - Không thể liên kết bảng cơ sở dữ liệu MySql với DataSet

  4. Mysql LEFT JOIN của ba bảng trả về nhiều Hàng

  5. MySQL - Làm thế nào để sửa đổi giá trị mặc định của cột?