我有一个PHP CLI脚本,我用它通过SSL建立了一个mysql连接:
$DBlink = mysqli_init();
mysqli_options ($DBlink, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$DBlink->ssl_set('[ValidPath]/client-key.pem', '[ValidPath]/client-cert.pem', '[ValidPath]/ca-cert.pem', NULL, NULL)
$link = mysqli_real_connect ($DBlink, 'IP', 'USER', 'PASSWORD', 'DB', 3306, NULL, MYSQLI_CLIENT_SSL);我希望这将通过SSL建立到远程Mysql服务器(Google Cloud SQL)的连接,但是,脚本报告Abort Trap 6:我认为这是C错误?在谷歌搜索之后,我认为也许可以访问.pem文件。它们是全球可读的,ValidPath是完全合格的。我知道.pem文件很好用,因为它们和MySQLWorkBench使用的文件是一样的,而且通过SSL的连接也很好。如果我注释掉$DBlink->ssl_set行,那么我会得到Connect error (1045): Access denied for user 'user'@'xx.xx.xx.xx' (using password: YES),所以看起来我的脚本正在与服务器对话。似乎是ssl_set导致了中止。
我按照Google Cloud SQL上的说明进行了网络授权。就像我说的。使用MySQLWorkBench连接到相同的实例可以完美地工作。另外,连接到:
mysql --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem \
--host=[INSTANCE_IP] --user=root --password它也能完美地工作。那么,看起来PHP有什么地方出问题了?
我将该脚本与MacOS 10.12.6上的PHP版本7.1.8一起使用。
SSL info from php -i | grep SSL
SSL => Yes
SSL Version => SecureTransport
core SSL => supported
extended SSL => supported
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.2l 25 May 2017
OpenSSL Header Version => OpenSSL 1.0.2l 25 May 2017
OpenSSL support => enabled我被难住了。有没有人遇到过这种情况?SSL版本是否不兼容?
发布于 2020-03-02 12:03:22
SSL验证失败的原因应该很简单,但问题是Abort Trap: 6会导致PHP崩溃,并且不会输出有意义的错误消息来解释根本原因。
有多种可能的原因。当我这样做时,我遇到了这个问题:
$mysqli->real_connect("<host>:3306", $user, $password, $database, NULL, NULL, MYSQLI_CLIENT_SSL);但这是可行的:
$mysqli->real_connect("<host>", $user, $password, $database, 3306, NULL, MYSQLI_CLIENT_SSL);我还看到了一个StackOverflow问题,将" localhost“更改为"127.0.0.1”解决了问题,以防数据库正在侦听localhost。你可能还会遇到其他失败的原因。
通常,这些方法可能会帮助您找出根本原因:
php.ini中启用错误记录。也许会打印出有意义的错误信息。。
https://stackoverflow.com/questions/46536121
复制相似问题