相关疑难解决方法(0)

SSL和中间人的误解

我已经阅读了大量与此问题相关的文档,但我仍然无法将所有内容整合在一起,所以我想问几个问题.

  1. 首先,我将简要描述一下我理解的身份验证过程,因为我在这方面可能会弄错:客户端启动连接,服务器使用公钥,某些元数据和数字签名来响应信任的权威.然后客户端决定是否信任服务器,使用公钥加密一些随机会话密钥并将其发回.该会话密钥只能用存储在服务器上的私钥解密.服务器执行此操作,然后HTTPS会话开始.

  2. 那么,如果我在上面是正确的,问题是如何在这种情况下发生中间人攻击?我的意思是,即使有人用公钥拦截服务器(例如www.server.com)的响应并且有一些方法让我认为他是www.server.com,他仍然无法解密我的会话密钥没有私钥.

  3. 谈到相互认证,是关于服务器对客户身份的信心吗?我的意思是,客户端已经可以确定她正在与正确的服务器进行通信,但现在服务器想要找出客户端是谁,对吧?

  4. 最后一个问题是关于相互认证的替代方案.如果我在所描述的情况下充当客户端,如果在SSL会话建立后在HTTP头中发送登录名/密码怎么办?正如我所看到的,这些信息无法被截获,因为连接已经被保护,服务器可以依赖它进行识别.我错了吗?与相互身份验证相比,这种方法有哪些缺点(只有安全问题很重要,而不是实现复杂性)?

security ssl man-in-the-middle

87
推荐指数
3
解决办法
8万
查看次数

使用 SSL 时 MySQLi 是否默认验证服务器证书?

这是我通常使用 SSL 连接到 MySQL 数据库的方式:

$db = mysqli_init();
mysqli_ssl_set(
    $db,
    NULL,
    NULL,
    '/etc/ssl/my-certs/ssl-ca.crt.pem',
    NULL,
    NULL
);
mysqli_real_connect(
    $db,
    'db.example.com',
    'john',
    '123456',
    NULL,
    NULL,
    NULL,
    MYSQLI_CLIENT_SSL
);
Run Code Online (Sandbox Code Playgroud)

在阅读 的 PHP 文档时mysqli::options,我注意到该MYSQLI_OPT_SSL_VERIFY_SERVER_CERT选项的存在,我认为这是一个让 MySQLi 验证服务器证书的选项。不幸的是,MYSQLI_OPT_SSL_VERIFY_SERVER_CERT文档中没有描述。这个选项的存在让我怀疑我是否一直不安全地连接到 MySQL。现在我想知道安全连接到 MySQL 的正确方法是否是这样的:

$db = mysqli_init();
mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);  // <- Attention.
mysqli_ssl_set(
    $db,
    NULL,
    NULL,
    '/etc/ssl/my-certs/ssl-ca.crt.pem',
    NULL,
    NULL
);
mysqli_real_connect(
    $db,
    'db.example.com',
    'john',
    '123456',
    NULL,
    NULL,
    NULL,
    MYSQLI_CLIENT_SSL
);
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:

  1. MYSQLI_OPT_SSL_VERIFY_SERVER_CERT设置为true默认?
  2. 有什么作用MYSQLI_OPT_SSL_VERIFY_SERVER_CERT?(请引用)
  3. 使用 MySQLi 连接到远程 …

php mysql ssl

4
推荐指数
1
解决办法
1230
查看次数

标签 统计

ssl ×2

man-in-the-middle ×1

mysql ×1

php ×1

security ×1