我有一个PHP CLI脚本,我用它来通过SSL建立一个mysql连接:
$SourceStorageAccountName = "<SourceStorageAccountName>"
$SourceStorageKey = Get-AzureStorageKey -StorageAccountName $SourceStorageAccountName
$StorageContext = New-AzureStorageContext -StorageAccountName $SourceStorageKey.StorageAccountName -StorageAccountKey $SourceStorageKey.Primary
$containers = Get-AzureStorageContainer -Context $StorageContext
foreach ($c in $containers) {
"Transfer container " + $c.Name
$cmd = "C:\'Program Files (x86)'\'Microsoft SDKs'\Azure\AzCopy\AzCopy.exe /Source:" + $c.CloudBlobContainer.Uri.AbsoluteUri + " /Dest: +"youfile path"
Invoke-Expression $cmd
}
我希望这会通过SSL建立与远程Mysql Server(Google Cloud SQL)的连接,但脚本会报告Abort Trap 6:我认为这是一个C错误?经过一些谷歌搜索后,我想也许可以访问.pem文件。它们是世界可读的[ValidPath]是完全合格的。我知道.pem文件很好,因为它们与MySQLWorkBench使用的相同,并且连接在SSL上很好。如果我注释掉$ DBlink-&gt; ssl_set行,那么我得到 $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_set导致Abort。
我按照Google Cloud SQL上的说明进行网络授权。就像我说的那样。使用MySQLWorkBench连接到同一个实例非常有效。另外,连接:
Connect error (1045): Access denied for user 'user'@'xx.xx.xx.xx' (using password: YES)
也很完美。那么,似乎有些东西是用PHP填写的?
我在MacOS 10.12.6上使用PHP CLI 7.1.8版的脚本。
mysql --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem \
--host=[INSTANCE_IP] --user=root --password
我很难过。有没有人遇到过这个? SSL版本不兼容吗?
答案 0 :(得分:0)
SSL验证失败的原因应该很简单,但是挑战在于PHP崩溃Abort Trap: 6
,并且不会打印出有意义的错误消息来解释根本原因。
有多种可能的原因。我这样做时遇到了这个问题:
$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,则从“ localhost”更改为“ 127.0.0.1”可以解决该问题。您也可能会遇到其他失败原因。
通常,这些方法可以帮助您找出原因:
php.ini
中的错误记录。也许有意义的错误消息将被打印出来。