php - 是否可以使用 SSL 但没有客户端证书将 PHP PDO 连接到远程 MySQL
问题描述
如果我理解正确,远程 MySQL 服务器具有服务器证书来对客户端进行身份验证并加密连接。并且客户端可以拥有客户端证书来向服务器进行身份验证,但是如果我不需要向服务器验证客户端,因为我只需要加密,我可以在创建 PDO 连接时省略客户端证书。
以及它的语法是什么,例如 $con = new PDO('mysql:host=someHost;dbname=someDB;port=3306',$user,$pass);
在哪里指定我想要 SSL 但没有客户端证书
解决方案
从下载证书
wget --no-check-certificate https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
pdo 连接代码看起来像
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '/path to crt file /DigiCertGlobalRootCA.crt.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false
);
$dsn = "mysql:host=$host;port=$port;dbname=$db_name";
try {
$pdo = new \PDO($dsn, $username, $password, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
mysql连接看起来像
//Initializes MySQLi
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/path to crt file /DigiCertGlobalRootCA.crt.pem", NULL, NULL);
mysqli_real_connect($conn, $host, $username, $password, $db_name, $port, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
//OR//
mysqli_real_connect($conn, $host, $username, $password, $db_name, 3306, NULL, MYSQLI_CLIENT_SSL);
//If connection failed, show the error
if (mysqli_connect_errno())
{
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
推荐阅读
- c++ - 多线程缓存未命中利用
- python - InvalidArgumentError:无法挤压 dim[1],预期维度为 1,得到 10 [[{{node metrics_14/acc/Squeeze}}]]
- python - Scipy 置信区间返回与手动计算不同的界限
- java - Spring MVC 是否可能与多个控制器相同@autowired?
- amazon-web-services - GDAL 2 在 AWS Elastic Beanstalk 中不起作用
- math - 在知道速度的情况下找到两个 AABB 盒子之间的正确推出向量
- vb.net - VirtualBox API IGuestSession 状态始终返回“已启动”,同时启动来宾操作系统
- express - 如何访问存储会话数据的 MemoryStore
- android - RecyclerView 元素中的 ViewPager
- flask - 我正在使用 flask_uploads 并收到此错误 ImportError: cannot import name 'patch_request_class' from 'flask_uploads'