Nginx与PhpMyAdmin(通过ssl保护)

时间:2018-08-13 12:33:30

标签: php ssl nginx phpmyadmin mariadb

我已经用Nginx配置了一个Web服务器。现在,我有一个以PhpMyAdmin作为管理GUI运行的MariaDB实例。它应该可以正常工作。自去年开始以来,我仍在学习Nginx和所有与Web服务器相关的东西。

我的每一个应用程序确实都受到SSL证书的保护,因此每次访问该应用程序所在的URL时,通过https进行的PHPMyAdmin连接都会受到保护。


    server {
      listen 80;
      listen [::]:80;
      server_name sub.example.com;

      location / {
        rewrite ^ https://$host$request_uri? permanent;
      }
    }

    server {
      listen 443 ssl http2;
      listen [::]:443 ssl;
      server_name sub.example.com;

      gzip off;
      server_tokens off;

      ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

      ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;

      ssl_ecdh_curve secp384r1;
      ssl_session_tickets off;
      ssl_dhparam /etc/ssl/certs/dhparam-4096.pem;

      # OCSP stapling
      ssl_stapling on;
      ssl_stapling_verify on;
      resolver 8.8.8.8;

      # SSL sessions
      ssl_session_cache shared:SSL:10m;
      ssl_session_timeout 10m;

      add_header X-Frame-Options DENY;
      add_header X-Content-Type-Options nosniff;
      add_header X-XSS-Protection "1; mode=block";
      add_header Strict-Transport-Security "max-age=0; includeSubDomains";

      location / {
        proxy_pass ip:port;
      }
    }

我认为仍然可以进行改进,但这是我的问题: 就像我说的那样,Nginx通过PhpMyAdmin运行了https。但是PhpMyAdmin本身会显示一条消息,提示不匹配:

This message is readable on the login

登录后,我看到一个:warning under database

我从警告from PhpMyAdmin itself的上方查看了文档

我使该连接可用于config.user.inc.php文件,并尝试在其中包括ssl行。最近几天,我做了很多研究来解决这个问题。使用如上所述的设置,PhpMyAdmin受保护,还是仅服务器端受保护?我从某处的帖子中读到,足以仅通过nginx进行加密。

如何确保PhpMyAdmin安全运行?除此之外,以上提到的文档是否已不适合腾讯的PhpMyAdmin版本,还是可以使用该实例?关于证书文件,我在Nginx conf文件中写下了两个指向证书文件的路径。我需要在PMA的ssl配置行中填写哪些文件?我的意思是,是否因为需要更多文件而使用了不同的文件?示例is this post

$cfg['Servers'][$i]['ssl'] = true;
$cfg['Servers'][$i]['ssl_cert'] = '/etc/mysql/client-cert.pem';
$cfg['Servers'][$i]['ssl_ca'] = '/etc/mysql/ca-cert.pem';
$cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/client-key.pem';

编辑:我只有these cert files

如果我可以通过将其添加到pma配置中找出原因,则哪些文件与哪一行匹配?

2 个答案:

答案 0 :(得分:1)

我认为您可能会误解pma配置中的ssl选项。

这不会对Web浏览器和phpmyadmin之间的通信进行加密,而是对phpmyadmin与mysql服务器之间的连接进行加密,并且必须在mysql服务器上进行设置。

如果您的mysql服务器仅在localhost上侦听,而phpmyadmin和mysql服务器在同一台计算机上,则无需进行设置。

答案 1 :(得分:0)

通过TCP / IP而不是套接字(localhost)连接。这样一来,您就可以验证该连接形式,并可以在有无SSL的情况下进行测试。

在单独的物理机上进行测试可能是合适的,但我不知道这是否会真正起到与同一台TCP / IP连接不同的作用。