MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT

Nếu iTop được lưu trữ trên một máy chủ khác với máy chủ MySQL và cơ sở hạ tầng dùng chung được sử dụng, thì bạn có thể muốn sử dụng mã hóa giữa ứng dụng và cơ sở dữ liệu

Một cách để làm điều đó là sử dụng kết nối an toàn MySQL. Xem tài liệu chính thức. mysql. mysql 5. 6 Hướng dẫn tham khảo. 6. 4 Sử dụng kết nối được mã hóa

Kể từ phiên bản 2. 5, iTop cho phép sử dụng các tham số đó

  • Cho phép mã hóa. db_tls. kích hoạt

  • tập tin ủy quyền chứng chỉ. db_tls. ca

Nếu 'db_tls. ca' không trống và hợp lệ thì việc xác minh chứng chỉ máy chủ sẽ được thực hiện trên mỗi kết nối. Theo mặc định, iTop sẽ kết nối với MySQL bằng cờ MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (xem http. //php. mạng/thủ công/en/mysqli. kết nối thực. php), nhưng nếu CA được chỉ định thì nó sẽ kết nối với cờ MYSQLI_CLIENT_SSL

Trước khi sử dụng kết nối như vậy trong iTop, bạn cần kiểm tra cấu hình của mình. Trong phpinfo (thiết lập cuộc gọi/phpinfo. php) mà bạn nên có, trong phần “mysqlnd” như sau

Combodo cũng hầu như không khuyên bạn nên kiểm tra liên kết bằng cách sử dụng tập lệnh sau

mysql-tls-kiểm tra. php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
 
 
 
assert_options(ASSERT_ACTIVE, true);
assert_options(ASSERT_WARNING, true);
assert_options(ASSERT_BAIL, true);
 
 
 
$sMySqlHost = 'mysqlserver'; //TODO
$iMySqlPort = 3306;
$sMySqlUser = 'user'; //TODO
$sMySqlPassword = 'password'; //TODO
$iMySqlFlag = MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
$sTlsKey = '/var/mysql/client-key.pem'; //TODO fix right value, null if not used
$sTlsCert = '/var/mysql/client-cert.pem'; //TODO fix right value, null if not used
$sTlsCa = '/var/mysql/ca.pem'; //TODO fix right value, null if not used
 
 
 
assert(is_readable($sTlsKey), 'Can\'t open SSL Key file');
assert(is_readable($sTlsCert), 'Can\'t open SSL Cert file');
assert(is_readable($sTlsCa), 'Can\'t open SSL CA file');
 
 
 
echo "Trying to connect using :\n host=$sMySqlHost, user=$sMySqlUser, port=$iMySqlPort\n";
echo "TLS options :\n key=$sTlsKey\n cert=$sTlsCert\n ca=$sTlsCa\n";
 
$oMysqli = new mysqli();
$oMysqli->init();
$oMysqli->ssl_set($sTlsKey, $sTlsCert, $sTlsCa, NULL, NULL);
$oMysqli->real_connect($sMySqlHost, $sMySqlUser, $sMySqlPassword, null, $iMySqlPort, NULL, $iMySqlFlag);
 
if ($oMysqli->connect_errno)
{
        die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
        if (!IsOpenedDbConnectionUsingTls($oMysqli)) {
                $oMysqli->close();
                die ('The connection can be opened but is not TLS encrypted !');
        }
 
        echo "Successfully connected using TLS !\n";
 
        $sTlsCipherValue = GetMySqlVarValue($oMysqli, 'ssl_cipher');
        $sTlsVersionValue = GetMySqlVarValue($oMysqli, 'ssl_version');
        echo "TLS cipher=$sTlsCipherValue\n";
        echo "TLS version=$sTlsVersionValue\n";
 
        $oMysqli->close();
}
 
 
 
/**
 * 

A DB connection can be opened transparently (no errors thrown) without being encrypted, whereas the TLS * parameters were used.
* This method can be called to ensure that the DB connection really uses TLS. * *

We're using this object connection : {@link self::$m_oMysqli} * * @param \mysqli $oMysqli * * @return boolean true if the connection was really established using TLS * @throws \MySQLException * * @uses IsMySqlVarNonEmpty */ function IsOpenedDbConnectionUsingTls($oMysqli) { $bNonEmptySslVersionVar = IsMySqlVarNonEmpty($oMysqli, 'ssl_version'); $bNonEmptySslCipherVar = IsMySqlVarNonEmpty($oMysqli, 'ssl_cipher'); return ($bNonEmptySslVersionVar && $bNonEmptySslCipherVar); } /** * @param \mysqli $oMysqli * @param string $sVarName * * @return bool * @throws \MySQLException * * @uses GetMySqlVarValue */ function IsMySqlVarNonEmpty($oMysqli, $sVarName) { $sResult = GetMySqlVarValue($oMysqli, $sVarName); return (!empty($sResult)); } /** * @param \mysqli $oMysqli * @param string $sVarName * * @return string * @throws \MySQLException * * @uses 'SHOW STATUS' queries */ function GetMySqlVarValue($oMysqli, $sVarName) { $oResults = $oMysqli->query("SHOW SESSION STATUS LIKE '$sVarName'", 1); if ($oResults === false) { return false; } $aResults = $oResults->fetch_array(MYSQLI_NUM); $sResult = $aResults[1]; return $sResult; }

Khi thành công, bạn sẽ thấy

Trying to connect using :
 host=192.168.10.70, user=sha256user, port=3306
TLS options :
 key=/var/www/html/client-key.pem
 cert=/var/www/html/client-cert.pem
 ca=/var/www/html/ca.pem
Successfully connected using TLS !
TLS cipher=DHE-RSA-AES256-SHA

Xử lý sự cố

Nếu bạn nhận được cảnh báo hoặc lỗi liên quan đến

--ssl

hoặc

--ssl-mode

Như là

iTop >= 2. 6. 2 nên xử lý những cảnh báo này với MySQL >= 5. 7. 0, nếu bạn vẫn gặp phải những cảnh báo này hoặc gặp phải chúng với phiên bản thấp hơn hoặc nhà cung cấp MySQL khác, chúng tôi có thể xác minh bằng

SELECT Version()

SELECT @@version

Rằng bạn nhận được phiên bản của mình và nhà cung cấp MySQL ở định dạng tương tự như

 10.3.15-MariaDB-log 

Những thông tin này sẽ được iTop xử lý để chọn các tham số chính xác theo nhà cung cấp/phiên bản MySQL của bạn và do đó cần phải được điền vào

Nếu bạn gặp lỗi sau khi sử dụng lệnh mariadb mysqldump, hãy kiểm tra phiên bản mysqldump bạn đang sử dụng