普通套接字与 SSL 套接字

Posted

技术标签:

【中文标题】普通套接字与 SSL 套接字【英文标题】:Plain socket vs SSL socket 【发布时间】:2013-06-06 21:47:05 【问题描述】:

普通套接字与 ssl 套接字(相对于 openSSL)有什么区别?

客户端能否通过普通套接字连接到服务器上的端口 443 (https),​​然后启动 ssl 握手?

【问题讨论】:

【参考方案1】:

是的。 OpenSSL 的经典(非 BIO)API 旨在完全支持这种类型的使用,允许 SSL/TLS 会话随时附加到现有套接字。 HTTPS 不是这种用法的一个很好的例子,因为 HTTPS 需要在连接时立即握手。更像是 POP3 或 SMTP,它们支持 STARTTLS 命令以在双方首先通过普通连接明确同意后动态启动 SSL 握手。

【讨论】:

【参考方案2】:

普通通信和 SSL 通信之间的唯一区别是协议。除了它期望通过 SSL 协议进行通信之外,端口 443 也没有什么特别之处。

因此,客户端完全可以使用任何特殊的方式连接到端口 443,并且只要它们发送正确的字节(代表 SSL 握手的字节),任何侦听端口 443 上的 SSL 连接的服务器都会响应。

如果您所说的“普通套接字”和“ssl 套接字”是指特定于 API 的东西,例如 Java EncryptedSSLSocketConnection,那么请澄清一下。

【讨论】:

谢谢。我提到的区别是关于 C++ 的 OpenSSL api。函数名称为 1. connect(来自 winsock.h 的普通套接字连接调用) 2.SSL_connect(SSL.h 的 ssl 套接字连接)

以上是关于普通套接字与 SSL 套接字的主要内容,如果未能解决你的问题,请参考以下文章

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“意外重新抛出”

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接 异常解决方法

在 Python 中打开 SSL 套接字连接

java连接本地数据库 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。