簡體   English   中英

Cakephp 3-通過SSL的MySQL連接

[英]Cakephp 3 - MySQL connection over SSL

我有一個關於使用CakePHP 3通過SSL連接到mySQL-Server的問題。我知道那可能更多是PHP問題,但我只是在這里編寫我使用的框架。

因此,我設置了一個遠程mysql服務器,並希望將CakePHP與之連接。 不幸的是我遇到了MySQL錯誤:

SQLSTATE[HY000] [3159] Connections using insecure transport are prohibited while --require_secure_transport=ON. 

原因我配置服務器僅允許安全連接。 之后,我搜索了關於安全連接的Cakephp文檔,並找到了ssl證書。 這是我的設置:

config.php

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'remote-ip',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'non_standard_port_number',
        'username' => 'my_user',
        'password' => 'my_password',
        'database' => 'my_database',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => true,
        'ssl_key' => '/home/my-user/client-ssl/client-key.pem',
        'ssl_cert' => '/home/my-user/client-ssl/client-cert.pem',
        'ssl_ca' => '/home/my-user/client-ssl/ca.pem',
        'log' => false,

不幸的是,我收到以下錯誤:

SQLSTATE[HY000] [2002]

據我所知,應該使用證書正確設置所有內容,因為我可以使用終端和續集來登錄證書,如下所示:

mysql -u my_user -h remote_ip -p --ssl-ca=~/client-ssl/ca.pem --ssl-cert=~/client-ssl/client-cert.pem --ssl-key=~/client-ssl/client-key.pem

如果我嘗試像這樣的一些原始php(當然還有我的信息):

<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);

$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);

$db->ssl_set('/etc/mysql/ssl/client-key.pem', '/etc/mysql/ssl/client-cert.pem', '/etc/mysql/ssl/ca-cert.pem', NULL, NULL);
$link = mysqli_real_connect ($db, 'ip', 'user', 'pass', 'db', 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$link)
{
    die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
    $res = $db->query('SHOW TABLES;');
    print_r ($res);
    $db->close();
}
?>

我有:

PHP警告:mysqli_real_connect():對等證書CN = MySQL_Server_5.7.20_Auto_Generated_Server_Certificate' did not match expected CN= remote_ip' MySQL_Server_5.7.20_Auto_Generated_Server_Certificate' did not match expected CN=

所以我的問題是現在。 有人有類似問題或可以幫助我獲得證書嗎? (我使用ubuntu 16,php 7)還是有另一種方法來解決“使用不安全的傳輸的連接...”錯誤?

該錯誤( Peer certificate CN=... )告訴您的是,自動生成的證書是為IP或域名(也許是127.0.0.1?)創建的,而不是您所連接的證書。 確保您擁有'remote-ip'的證書。

很有可能, config.php中host條目不正確。 嘗試將其設置為您的域名,服務器IP甚至“本地主機”。

'host' => 'remote-ip',

生成證書。

您也可能遇到另一個已經解決的問題:

通過SSL的PHP​​ MySQL。 對等證書不匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM