2016-11-18 17 views
3

私はPHPを使ってSSL接続を確立するのに奇妙な問題があります。 私はWebサーバーとデータベースサーバーを持っています。両方とも、私はopensslを通して証明書を生成しました。彼らはまったく同じです。MYSQLiとsslによるDBサーバへの接続

だから私は、mysqlコマンドを使用してWebサーバから接続しようとしている:

mysql -h 10.1.1.1 -uroot -p 
Password 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 71 
Server version: 5.5.5-10.1.19-MariaDB MariaDB Server 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> 

だから今、私はそれが本当にSSLあるかどうかを確認したい:

mysql> status; 
-------------- 
mysql Ver 14.14 Distrib 5.6.33, for Linux (x86_64) using EditLine wrapper 

Connection id:   71 
Current database: 
Current user:   [email protected] 
SSL:     Cipher in use is DHE-RSA-AES256-SHA 
Current pager:   stdout 
Using outfile:   '' 
Using delimiter:  ; 
Server version:   5.5.5-10.1.19-MariaDB MariaDB Server 
Protocol version:  10 
Connection:    10.1.1.1 via TCP/IP 
Server characterset: latin1 
Db  characterset: latin1 
Client characterset: utf8 
Conn. characterset: utf8 
TCP port:    3306 
Uptime:     1 hour 6 min 51 sec 

Threads: 1 Questions: 153 Slow queries: 0 Opens: 21 Flush tables: 1 Open tables: 15 Queries per second avg: 0.038 
-------------- 

mysql> 

だから私は、接続が確立されていることがわかり。私はこのエラーを取得しています私のウェブサーバ上でこのスクリプトを実行しているとき

<?php 
ini_set ('error_reporting', E_ALL); 
ini_set ('display_errors', '1'); 
error_reporting (E_ALL|E_STRICT); 

$db = mysqli_init(); 
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 

$db->ssl_set('/etc/mysql/newcerts/client-key-rsa.pem', '/etc/mysql/newcerts/client-cert.pem', '/etc/mysql/newcerts/ca-cert.pem', NULL, NULL); 
$link = mysqli_real_connect ($db, '10.1.1.1', 'root', 'xxxxxx', 'mysql', 3306, NULL, MYSQLI_CLIENT_SSL); 
if (!$link) 
{ 
    die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n"); 
} else { 
    $res = $db->query('SHOW TABLES;'); 
    print_r ($res); 
    $db->close(); 
} 
?> 

しかし、今:

[[email protected] config]# php test.php 

Warning: mysqli_real_connect(): Unable to locate peer certificate CN in /home/extranet/app/config/test.php on line 10 

Warning: mysqli_real_connect(): Cannot connect to MySQL by using SSL in /home/extranet/app/config/test.php on line 10 

Warning: mysqli_real_connect(): [2002] (trying to connect via tcp://10.1.1.1:3306) in /home/extranet/app/config/test.php on line 10 

Warning: mysqli_real_connect(): (HY000/2002): in /home/extranet/app/config/test.php on line 10 
Connect error (2002): 

これは非常に奇妙である私は私のデータベースに接続するために、いくつかのPHPスクリプトを書きました。私はmysql_connet()を試してみました...それは動作します...

任意のアイデア??

私はPHP 5.6.25

EDIT使用しています:これは、ウェブサーバからだけでなく正常に動作

[client] 
port=3306 
ssl-ca=/etc/mysql/newcerts/ca-cert.pem 
ssl-cert=/etc/mysql/newcerts/client-cert.pem 
ssl-key=/etc/mysql/newcerts/client-key-rsa.pem 

:私もファイル.my.cnf私のウェブサーバへのラインを追加している。もちろん、 をコマンドライン:

mysql -h 10.1.1.1 -u root --password \ 
    --ssl \ 
    --ssl-ca /etc/mysql/newcerts/ca-cert.pem \ 
    --ssl-cert /etc/mysql/newcerts/client-cert.pem \ 
    --ssl-key /etc/mysql/newcerts/client-key-rsa.pem \ 

証明書、ユーザー/グループ/パーミッション

[[email protected] newcerts]# ls -alZ 
drwxr-xr-x root root ?        . 
drwxr-xr-x root root ?        .. 
-rw-r--r-- root root ?        ca-cert.pem 
-rw-r--r-- root root ?        ca-key.pem 
-rw-r--r-- root root ?        client-cert.pem 
-rw-r--r-- root root ?        client-key.pem 
-rw-r--r-- root root ?        client-key-rsa.pem 
-rw-r--r-- root root ?        client-req.pem 
-rw-r--r-- root root ?        server-cert.pem 
-rw-r--r-- root root ?        server-key.pem 
-rw-r--r-- root root ?        server-req.pem 

SELinuxは無効になっている:私も同じエラーに直面していた

# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
#  enforcing - SELinux security policy is enforced. 
#  permissive - SELinux prints warnings instead of enforcing. 
#  disabled - No SELinux policy is loaded. 
SELINUX=disabled 
# SELINUXTYPE= can take one of these two values: 
#  targeted - Targeted processes are protected, 
#  minimum - Modification of targeted policy. Only selected processes are protected. 
#  mls - Multi Level Security protection. 
SELINUXTYPE=targeted 
+0

「ピア証明書CNを見つけることができません」というエラーが表示されるため、証明書の共通名をチェッキできますか? 'openssl x509 -in * cert.pem -text -noout' –

答えて

0

私がツイートの下に行なったし、私のために働きました。

PHP 7.1使用
$link = mysqli_real_connect ($db, '10.1.1.1', 'root', 'xxxxxx', 'mysql', 3306, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT); 
0

(。私はIPアドレスを接続するサーバーCN名異なるIPアドレスを...)、このコードが動作するようです:

私の例では
<?php 
ini_set ('error_reporting', E_ALL); 
ini_set ('display_errors', '1'); 
error_reporting (E_ALL|E_STRICT); 
$db = mysqli_init(); 
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 
$db->ssl_set('client-key.pem', 'client-cert.pem', 'ca-cert.pem', NULL, NULL); 
if (!mysqli_real_connect($db, 'serverip', 'user', 'userpass', 'databbasename', serverportonlynumbernoapostro, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT)) 
{ 
die("Connect Error: " . mysqli_connect_error()); 
} 
?> 

:本命フォルダ= PHPファイル

関連する問題