我正在尝试从GCE(Google Compute Engine)实例使用Google Cloud SQL over SSL。我的问题是无法通过SSL连接到云SQL实例。
mysql命令工作正常。我可以用认证文件连接到云SQL实例。
mysql -uroot -p -h [IP Address] --ssl-ca=/home/user/.cert/server-ca.pem --ssl-cert=/home/user/.cert/client-cert.pem --ssl-key=/home/user/.cert/client-key.pem
<?php
$pdo = new PDO('mysql:host=[IP Address];dbname=testdb', 'root', 'test', array(
PDO::MYSQL_ATTR_SSL_KEY =>'/home/user/.cert/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT=>'/home/user/.cert/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA =>'/home/user/.cert/server-ca.pem'
)
);
$stmt = $pdo->query("SHOW TABLES;");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
?>
PHP Warning: PDO::__construct(): Peer certificate CN=`[GCP project name]:[Cloud SQL instance name]' did not match expected CN=`[IP Address]' in /tmp/mysql.php on line 7
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] ' in /tmp/mysql.php on line 7
我在使用mysqli时也犯了同样的错误。
$mysqli = mysqli_init();
mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$mysqli->ssl_set('/home/user/.cert/client-key.pem',
'/home/user/.cert/client-cert.pem',
'/home/user/.cert/server-ca.pem',
NULL,NULL);
$mysqli->real_connect('[IP Address]', 'root', 'test', 'testdb', 3306, NULL, MYSQLI_CLIENT_SSL);
这是一个很好的例子
PHP Warning: mysqli::real_connect(): Peer certificate CN=`[GCP project name]:[Cloud SQL instance name]' did not match expected CN=`[IP Address]' in /tmp/mysql3.php on line 30
Warning: mysqli::real_connect(): (HY000/2002): in /tmp/mysql3.php on line 30
这个问题看起来和我的案子有关,但还没有答案。使用PHP与Mysql连接的SSL自签名认证
有人知道解决方案吗?
更新1
将报告该错误。https://bugs.php.net/bug.php?id=71003
在我使用mysqli时修复了它
我所做的如下:
1我将PHP更新到5.6.20
sudo apt-get install php5
$mysqli->real_connect('[IP Address]', 'root', 'test', 'testdb', 3306, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
这个错误报告显示了PDO的情况。听起来还没搞定。
https://bugs.php.net/bug.php?id=71845
最糟糕的是你们使用了不可能的CN名称(:)。如果CN没有冒号,也许我可以将ip和CN映射到我的主机文件中,这样当对等验证完成时,它就可以通过。使用冒号,php认为是主机,是端口
我理解目前通过IP连接时的情况并不理想。
但似乎他们提供了一种叫做“代理”的解决方案。
我使用的是Cloud SQL第二代,我的应用程序是由GCE托管的。所以我想我可以用代理的方式。我现在就试试。
在Ubuntu上安装代理
$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
$ mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
$ chmod +x cloud_sql_proxy
$ sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
$ ./cloud_sql_proxy -dir=/cloudsql -instances=<project name>:us-central1:mydb
PDO
<?php
$pdo = new pdo('mysql:unix_socket=/cloudsql/<project name>:us-central1:mydb;dbname=testdb','root','test');
$stmt = $pdo->query("SHOW TABLES;");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
?>
$mysqli = mysqli_connect('localhost', 'root', 'test', 'testdb', 3306, '/cloudsql/<project name>:us-central1');
$sql = "SELECT id FROM users";
if ($result = $mysqli->query($sql)) {
while ($row = $result->fetch_assoc()) {
echo $row["id"] . "\n";
}
$result->close();
}
$mysqli->close();
参考文献(日文)
http://blog.hrendoh.com/connecting-to-google-cloud-sql-using-mysql-client/http://blog.hrendoh.com/google-appengine-php-using-cloud-sql/
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
到目前为止我所做的步骤: 国家/地区名称:空 州或省名称:空 地区名称:空 组织名称:空 组织单位名称:空 通用名:localhost 电子邮件地址:空
问题内容: 我在PHP 5.6上使用PHPMailer,围绕PHP 5.6中的证书提高的安全性当然很有趣。 我试图将测试消息发送到Dreamhost上托管的域,PHPMailer返回的错误是:无法连接到SMTP主机。 但是,该错误并不正确,我已启用日志记录,这是实际发生的情况。 连接:打开mx1.sub4.homie.mail.dreamhost.com:25,超时= 30,options = a
我尝试用默认的amazon子域:some-unique-path.elb.amazonaws.com在ALB上配置https,问题是我找不到如何为该域生成ssl证书:amazon证书管理器不允许为amazonaws子域生成证书。有没有什么方法可以使它不购买自定义域和配置为ALB?
null openssl pkcs12-export-in cert1.pem-inkey privkey1.pem-out cert_and_key.p12-name certificate-cafile fullchain1.pem-caname root keytool-importKeystore-destStorePAS5W0RD123-destKeypass Pas5w0rd123-d
对不起,我的错误,有两件事必须强调: 我正在尝试使用自签名证书作为HTTPS客户端证书。但是,存在一个问题“SSL:无法从对等证书获取公共名称” null 正在尝试127.0.0.1...已连接Enter PEM密码短语: 成功设置证书验证位置: cafile:/home/freeman/dev/git/ca_tools/ca_tools/ssl/ca/secure_ca.crt capath:/
我被困在如何修复这个SSL错误上—— 我的SSL证书在Chrome上运行良好,但在Safari和Firefox上,如果我去www.domain.com而不是domain.com,就会出现主机名不匹配的错误 我已经使用Certbot为我的domain.com和www.domain.com域设置了SSL证书 当我在nginx上检查以确保证书存在时,我运行< code>sudo certbot - ng