我已使用以下代码将OpenSSL 1.0.2h编译到MySQL 5.7.13服务器上的/ usr / local / openssl中:
tar xvzf openssl-1.0.2h.tar.gz -C /usr/local
cd /usr/local/openssl-1.0.2h
./config --prefix=/usr/local/openssl shared
make depend
make
make install
之后,我用MySQL配置了
cmake . -DMYSQL_DATADIR=/usr/local/mysql/dat -DWITH-SSL=/usr/local/openssl
当MySQL第一次启动时,它会在 / dat 目录中创建八个密钥/证书(.pem)文件:
在MySQL Workbench中,我可以看到可用服务器功能中的SSL已启用:
并且在身份验证部分中标识了SHA256 / SSL文件:
在Workbench的用户和权限部分,我创建了两个测试用户:
' user_standard' @'%'选择标准进行身份验证类型
' user_sha256' @'%'选择 SHA256密码进行身份验证类型
在我的 my.cnf 文件中,我指定了以下内容:
[client]
ssl-ca = /usr/local/mysql/dat/ca.pem
ssl-cert = /usr/local/mysql/dat/client-cert.pem
ssl-key = /usr/local/mysql/dat/client-key.pem
[mysqld]
ssl-ca = /usr/local/mysql/dat/ca.pem
ssl-cert = /usr/local/mysql/dat/server-cert.pem
ssl-key = /usr/local/mysql/dat/server-key.pem
ssl-cipher = DHE-RSA-AES256-SHA
"状态" MySQL服务器的内容如下:
mysql> status
--------------
./bin/mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Connection id: 4
Current database: mysql
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current page: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.13-debug-log Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysqld.sock
我有一个运行 Apache 2.4.10 的单独客户端服务器(使用 - with-ssl = / usr / local / openssl 配置), PHP 7.0 .7 (使用 - with-openssl = / usr / local / openssl 配置)和相同的 OpenSSL 1.0.2h (使用配置) --prefix = / usr / local / openssl shared )。我的phpinfo.php文件显示 OpenSSL支持 已启用,其库/标题版本确实 1.0.2h 。
然后我将MySQL服务器中的 ca.pem , server-cert.pem 和 server-key.pem 文件复制到Apache / PHP服务器并创建了一个目录来放入它们: / usr / local / openssl / ssl / mysql / 。
这是我的PHP代码,即成功!"使用[user_standard]的凭据,但我明白了,
警告: mysqli_real_connect():( HY000 / 1045):用户访问被拒绝' user_sha256' (使用密码:是)
只需切换 $ user 和 $ pass 变量即可以[user_sha256]身份登录。其他一切都是一样的。
$conn = mysqli_init();
$conn->options (MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$conn->ssl_set ('/usr/local/openssl/ssl/mysql/server-key.pem', '/usr/local/openssl/ssl/mysql/server-cert.pem', '/usr/local/openssl/ssl/mysql/ca.pem', NULL, 'DHE-RSA-AES256-SHA');
$serv = 'MySQL_Server_5.7.13_Auto_Generated_Server_Certificate';
$user = 'user_standard'; // Switching to 'user_sha256' = Permission denied
$pass = 'user_standard'; // Switching to 'user_sha256' = Permission denied
$data = 'test';
$conn->real_connect ($serv, $user, $pass, $data, 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$conn) {
die ('Connect error (' . mysqli_connect_errno(). '): ' . mysqli_connect_error() . "\n");
} else {
echo "Success!";
}
$conn->close();
我不了解差异和/或可能需要以不同方式配置以允许PHP连接到SHA256帐户。
顺便说一句,MySQL服务器和Apache / PHP服务器都是: CentOS Linux版本7.2.1511(核心)。