프로젝트를 PHP 5.6에서 PHP 7로 옮길 때 이상한 문제가있다. mysqli_init();
을 호출 한 후 호출하기 전에 데이터베이스에 SSL 연결을 설정할 수있는 데이터베이스 클래스가있다. mysqli_real_connect()
.PHP 7 업그레이드 후 MySQLi SSL 연결이 작동을 멈춘다
PHP 5.6에서이 스크립트를 개발했으며 원격 서버에 대한 SSL 연결을 성공적으로 만들었습니다. 원격 데이터베이스 서버는 자체 서명 인증서를 사용하지 않습니다.
이 if($verify) { $this->mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); }
$this->mysqli->ssl_set($key, $cert, $ca, $capath, $ciphers);
방법은 true
의 기본 설정에 $verify
을 설정하고 그대로 인증서 번들 변수 $ca
통과 왼쪽 : 내 DB 클래스의 setSSL
방법에서
나는이 있습니다.
이것은 PHP 5.6에서 훌륭하게 작동하며 정확히 무엇이되어야하며 실제로 SSL 연결을 사용하고 있는지 확인합니다.
동일한 서버에서 하위 도메인을 생성하고 PHP 7을 사용하도록 설정했습니다. 성능은 훨씬 좋았고 코드는 PHP 7입니다.
원격 SSL mysqli 연결을 제외하고 새로운 하위 도메인에서 내 코드의 전체 복사본을 만들었습니다. 모든 것이 잘 작동합니다.
필자는 PHP 7 및 기타 많은 기능에서 제거 된 기능을 확인했지만 왜 이런 일이 발생하는지 알 수 없습니다. 로그에서
추출물 : 다른 주에
[Msg: mysqli::real_connect(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed]
[Msg: mysqli::real_connect(): Cannot connect to MySQL by using SSL]
[Msg: mysqli::real_connect(): [2002] (trying to connect via tcp://******.co.uk:3306)]
이 내가 CA 인증서 번들을 통해 통과하지 못한 경우 내가 먼저 PHP 5.6에서이 기능을 개발 할 때 생성되는 동일한 오류입니다.
오류 로그의 새로운 기능 :
어떻게 연결할 및 적절한 인증서 체인을 구축하려면 여기를 읽어? – neuhaus
답장을 보내 주셔서 감사합니다. @neuhaus 로그에서 추출한 내용으로 질문을 업데이트했습니다. 위에서 언급했듯이, 이것은 5.6에서 정상적으로 작동하지만 PHP 7에서는 중단됩니다.ca 파일의 올바른 위치가 ssl_set 메소드에 전달되고 있음을 확인했습니다. – Seth