【发布时间】:2020-05-03 19:01:39
【问题描述】:
不假思索,我通过使用Socket 创建的连接发送了密码,该连接由 Java 中的默认 SSLSocketFactory 创建。对于SSLSocketFactory.getDefault(),文档说明如下:
返回默认的 SSL 套接字工厂。 第一次调用此方法时,会检查安全属性
ssl.SocketFactory.provider。如果它不为 null,则加载并实例化具有该名称的类。如果成功并且对象是SSLSocketFactory的实例,则将其设为默认的 SSL 套接字工厂。否则,此方法返回
SSLContext.getDefault().getSocketFactory()。如果调用失败,则返回一个不起作用的工厂。
我确信 Java 并没有试图欺骗我,但由于这是我第一次这样做,所以我想确保它是我可以依赖的密码加密的东西。
编辑:在服务器响应中“Set-Cookie”的属性数据末尾,它显示“HttpOnly”,然后是“Secure”。我假设这意味着服务器已经确认连接是安全的,但我不是 100% 确定。
【问题讨论】:
-
“我假设这意味着 服务器已经确认连接是安全的,但我不能 100% 确定。” - 错误的。 cookie 的
secure属性没有说明当前连接,但意味着客户端应仅使用 HTTPS 将 cookie 发送回。甚至 HTTPS 实际上并不意味着安全,因为它可能是例如客户端没有正确检查服务器证书。 -
安全?你在问什么潜在的攻击?你是在问
SSLSocketFactory是否曾经返回一个不使用 TLS 的套接字? (不,不会。)更重要的是您将密码发送给谁,这意味着您需要确保您的信任锚设置正确。 -
只要您没有启用匿名密码套件并且适当地检查了服务器证书,连接就是安全的。
-
@user207421 我只做了我在帖子中提到的事情。话虽如此,我不认为我检查了服务器证书。这并不是说我不信任将凭据发送到的服务器。
-
"...我正在制作一个特定于我信任的网站的网络抓取工具..." - 验证证书和信任服务器是不同的事情。验证证书是为了确保您与 预期 服务器而不是中间的某个人交谈。成功验证并不意味着您可以信任服务器。类似地信任服务器并不意味着您可以跳过证书验证。
标签: java sockets ssl password-encryption sslsocketfactory