【问题标题】:Nginx with PhpMyAdmin (Secured via ssl)带有 PhpMyAdmin 的 Nginx(通过 ssl 保护)
【发布时间】:2019-01-20 04:38:27
【问题描述】:

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

我运行的每个应用程序都使用 SSL 证书进行保护,因此每次访问应用程序所在的 URL 时,PHPMyAdmin 通过 https 的连接也是如此。

服务器 { 听 80; 听 [::]:80; server_name sub.example.com; 地点 / { 重写 ^ https://$host$request_uri?永恒的; } } 服务器 { 听 443 ssl http2; 听 [::]:443 ssl; server_name sub.example.com; gzip 关闭; server_tokens 关闭; 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 关闭; ssl_dhparam /etc/ssl/certs/dhparam-4096.pem; #OCSP 装订 ssl_stapling 开启; ssl_stapling_verify 开启; 解析器 8.8.8.8; # SSL 会话 ssl_session_cache 共享: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"; 地点 / { proxy_pass ip:端口; } }

我认为仍有改进的可能,但这是我的问题: 就像我说的,PhpMyAdmin 通过 Nginx 在 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 配置来解决,哪些文件与哪一行匹配?

【问题讨论】:

    标签: php ssl nginx phpmyadmin mariadb


    【解决方案1】:

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

    这不会加密您的网络浏览器和 phpmyadmin 之间的流量,而是加密 phpmyadmin 和您的 mysql 服务器之间的连接,它必须在您的 mysql 服务器上设置。

    如果你的 mysql 服务器只监听 localhost 并且你的 phpmyadmin 和 mysql 服务器在同一台机器上,你不需要设置这个。

    【讨论】:

    • 好的,确认一下就好了。我在上面的帖子中没有提到,但是我使用 Docker 容器,我通过 Docker 生成网络服务器证书。但正如你所说,它是用于 MySQL 和 PhpMyAdmin 之间的连接。我需要进行配置以确保我有安全的连接吗?这一切都是关于用于商业目的的单个服务器 - 也不是本地的并且具有域
    • 这取决于您的网络设置。你如何连接到你的 MySQL 服务器?它是与所有其他 docker 容器在本地网络上,还是对互联网开放?如果它在本地网络上,您应该没问题,只需确保您的防火墙不允许来自本地网络外部的传入连接。如果您的 MySQL 服务器对 Internet 开放,您需要在 MySQL 服务器上设置 SSL。为 MySQL 服务器生成一个新证书并查看MySQL docs on SSL
    • 服务器对公网开放。但是,如果我需要使用 PhpMyAdmin 保护 MySQL - 我可以使用与我的 Nginx 设置相结合的证书文件吗?哪个文件与我帖子中最后一个代码块中的哪一行匹配?
    • 我不确定您的公共网络是什么,但在我看来,您需要在 MySQL 服务器上设置 SSL。您不需要在 PHPMyAdmin 中执行此操作,它需要在您的 MySQL 服务器本身上完成(通过编辑您的 my.cnf 文件)。您可能应该为您的 MySQL 服务器创建新证书,否则您可以使用相同的证书,但在这种情况下,您的 MySQL 服务器和 Nginx 需要具有相同的域名。设置完成后,您可以使用 $cfg['Servers'][$i]['ssl'] = true; 配置 PHPMyAdmin;其他选项用于基于 SSL 的身份验证
    • 好的,我试过了。我制作了 openssl 证书文件,并将正确的路径添加到 my.cnf 当我进入我的 Docker Mariadb 容器并请求像 %ssl% 这样的全局变量时,have_openssl 说它的值为是。相反,have_ssl 处于禁用状态。我读了禁用代表支持,但配置不正确或其他东西。并且证书路径在同一个列表中。但是,它在我的日志中显示找不到文件,并且“SSL_CTX_set_default_verify_paths 失败。”有什么问题?
    【解决方案2】:

    通过 TCP/IP 而不是 Socket (localhost) 连接。这将让您验证这种连接形式,并让您在使用和不使用 SSL 的情况下进行测试。

    在单独的物理机器上进行测试可能是合适的,但我不知道这是否真的会执行与同一机器 TCP/IP 连接不同的任何事情。

    【讨论】:

    • 对不起,我怎么能这么想?我还在学习中,你能解释一下吗?我已经设置了到我的 Docker 容器的远程连接,它的工作方式是否相同?
    • 顺便说一句,我发现这是最大的问题,唯一(通常)为什么它没有显示正确(有 ssl on YES)是因为权限错误。不过,我之前查看了权限。但是,当我查看 cat /etc/passwd 时,我没有 mysql 用户 - 所以我无法对 ssl 目录执行 chown -R mysql:mysql 操作。我需要手动创建该用户吗?如果是这样,密码和访问mysql(mariadb)呢?
    • @Colin - adduser mysql 和 chown mysql... 由大多数安装程序自动完成。在 MySQL 中创建一个 root 密码也应该通过安装过程来完成,但是要在用户的帮助下(获取密码)。
    • 我猜它通常在所选图像的 Dockerfile 中。但它不会让我成为 mysql 用户。每次我运行 mariadb 映像时,都没有 mysql 用户。知道我如何解决上述问题吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2018-08-05
    • 2018-12-25
    相关资源
    最近更新 更多