mysqli :: real_connect ()를 호출하기 전에 mysqli :: ssl_set () 함수를 호출해야합니다. 그렇지 않으면 설정이 적용되지 않습니다. 잘못된 전화 순서는 가장 일반적인 감독 중 하나입니다.
Error example:
$conn = new mysqli();
$conn->real_connect('db.m66.net', 'user', 'pass', 'database');
$conn->ssl_set('/path/client-key.pem', '/path/client-cert.pem', '/path/ca.pem', NULL, NULL);
Correct example:
$conn = new mysqli();
$conn->ssl_set('/path/client-key.pem', '/path/client-cert.pem', '/path/ca.pem', NULL, NULL);
$conn->real_connect('db.m66.net', 'user', 'pass', 'database');
real_connect () Connection을 사용하는 경우 MySQLI_CLIENT_SSL 플래그가 전달되지 않으면 SSL_SET ()가 호출 되더라도 연결이 SSL을 활성화하지 못할 수 있습니다.
$conn->real_connect('db.m66.net', 'user', 'pass', 'database', null, null, MYSQLI_CLIENT_SSL);
PHP가 OpenSSL 확장을 활성화했는지 확인하는 것이 중요합니다. php -m |를 실행하여 확인할 수 있습니다 grep은 phpinfo () 또는 명령 줄을 통해 OpensSL입니다 . 활성화되지 않으면 PHP는 SSL 암호화 된 연결을 설정할 수 없습니다.
서버는 또한 SSL을 활성화하고 법적 인증서 및 CA 파일을 제공해야합니다. 다음 SQL 문을 통해 확인할 수 있습니다.
SHOW VARIABLES LIKE '%ssl%';
결과에 HAME_SSL이 비활성화되어 있음이 표시되면 클라이언트 설정에 관계없이 SSL이 적용되지 않습니다.
일부 이전 버전의 PHP 또는 LibMySqlClient Connection 라이브러리는 SSL을 지원하지 않거나 지원하기 위해 특정 컴파일 옵션이 필요할 수 있습니다. SSL을 기본적으로 지원하고 더 현대적이기 때문에 MySQLND 드라이버를 사용하는 것이 좋습니다.
모든 것이 올바르게 구성 되더라도 연결이 활성화되어 있는지 확인해야합니다. 다음 진술을 통해 실제 암호화 상태를 볼 수 있습니다.
$result = $conn->query("SHOW STATUS LIKE 'Ssl_cipher'");
$row = $result->fetch_assoc();
if (!empty($row['Value'])) {
echo "SSL 启用,加密算法为: " . $row['Value'];
} else {
echo "SSL 未启用";
}
반품이 비어 있으면 SSL이 실제로 활성화되지 않습니다.
일부 환경에서 LocalHost를 사용하는 경우 연결이 UNIX 소켓으로 돌아와서 네트워크 계층 SSL을 우회 할 수 있습니다. 예를 들어 명시 적 호스트 이름 또는 IP 주소를 사용하는 것이 좋습니다.
$conn->real_connect('db.m66.net', 'user', 'pass', 'database');