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. phpini_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[]
và
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