为Mysqli新连接设置SSL证书位置

icomxhvb  于 2023-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(151)

我连接到我的MySQL数据库,像这样:

$mysqli = new mysqli('76.65.87.64', 'user', 'my_password', 'my_db');

我有3个证书用于安全的SSL连接。
如何在此连接中使用它们?

yizd12fk

yizd12fk1#

我把这个答案放在这里是因为我也遇到了同样的问题,但已经深陷兔子洞...
在我的例子中,我正在维护一个遗留的PHP服务器,它像OP一样使用mysqli以oop格式
$mysqli = new mysqli('123.123.123.123','user','my_password','my_db');
现在需要增加SSL/TLS才能连接。
我已经通过互联网搜索了mysqli oop格式和ssl功能,可悲的是似乎是不可能做到的。
要添加SSL/TLS,有几个选项可供选择(我选择选项1):

  • 将mysqli从oop格式更改为procedual格式,并以这种方式添加SSL

$mysqli = new mysqli('123.123.123.123','user','my_password','my_db');

$mysqli  = mysqli_init();
            $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
            $mysqli->ssl_set(NULL, NULL, "xxx.crt", NULL, NULL);
            $mysqli->real_connect('123.123.123.123', 'user', 'my_password', 'my_db');

1.更改为使用PDO
1.不要使用SSL(不是最佳选择)
我认为理想的方法是迁移到PDO(optoins 2),但根据项目的规模和给定的时间,我们需要选择1。
要做到这一点,我们可以使用Regex进行批量搜索和替换(我使用Visual Studio Code进行搜索和替换):

  • 搜索:

($[^-]+)->真实的_escape_string(([^)]+))

  • 替换:

mysqli_真实的_escape_string($1,$2)

  • 搜索:

($[^-]+)->query(([^)]+))

  • 替换:

mysqli_query($1,$2)
也可以按照上面的格式把其他mysqli的oop函数改成mysqli的过程。希望这对某人有帮助,谢谢。

xqk2d5yq

xqk2d5yq2#

一点简单的方法方便actucaly mysqli

<?php  namespace mysqlConnect;

class mymysqli extends \mysqli {

        
        public function __construct($db_host, $db_user, $db_pass, $db_name, $persistent = true, $ssl = false, $certpublic = "") {
            //$this->close();
            parent::init();
            //parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);
            if($ssl) {
                parent::options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false);
                parent::ssl_set(NULL, NULL, $certpublic, NULL, NULL);
            }
            @parent::real_connect(($this->persistent ? 'p:' : '') . $this->db_host, $this->db_user, $this->db_pass, $this->db_name);

        }
}

相关问题