什么是HTTPS的端口号?

在计算机网络中,端口号(Port Number)是用来标识应用程序或服务进程的。当数据包发送到一台具有特定IP地址的计算机时,端口号可以帮助操作系统确定这个数据包应该交给哪个正在运行的应用程序处理。

你可以将IP地址想象成一栋大楼的地址,而端口号则是这栋大楼里某个具体房间的号码。同一栋大楼(IP地址)可以有许多不同的房间(端口号),每个房间里都运行着不同的服务(应用程序)。

对于安全超文本传输协议(HTTPS),它使用的标准默认端口号是443

它与HTTP端口80有什么不同?

与之相对的,非安全的超文本传输协议(HTTP)的标准默认端口号是80

两者最根本的区别在于数据传输是否加密。通过端口80的HTTP连接是明文传输的,数据在网络中裸露,容易被截获和读取。

而通过端口443的HTTPS连接,在实际的应用数据传输之前,会建立一个由传输层安全(TLS)协议(及其前身SSL协议)提供的加密通道。所有通过这个通道传输的数据都是加密的,即使被截获也难以理解,从而保证了通信的机密性和完整性。

为什么HTTPS使用端口443?

为什么需要端口号?

端口号的存在是为了实现网络服务的多路复用(Multiplexing)。一台服务器可能同时提供Web服务、电子邮件服务、数据库服务等。当一个外部请求到达这台服务器时,仅凭IP地址无法区分它是要访问哪个服务。端口号就如同服务的“入口”,让操作系统能将不同的请求分发到正确的应用程序。

为什么选择443?

端口号范围从0到65535。其中,0到1023被称为“周知端口”(Well-Known Ports),它们被IANA(互联网号码分配机构)官方预留和分配给互联网上最常用和最稳定的服务。

端口80被分配给HTTP,而端口443则被分配给HTTPS。将HTTPS这样的重要安全服务分配到周知端口范围,并明确指定为443,有以下几个优点:

  • 标准化: 成为官方标准后,所有的网络软件和设备都会遵守这个约定,无论是浏览器、服务器还是防火墙,都“知道”443端口是用于HTTPS的。
  • 便利性: 由于它是默认端口,用户在访问HTTPS网站时,URL中不需要显式地输入端口号(例如https://example.com会自动连接到example.com:443),这极大地简化了用户的访问方式。
  • 识别性: 网络管理员和安全专家可以通过查看端口号,快速识别流量的类型,知道流经443端口的通常是需要TLS/SSL解密的HTTPS流量。

选择443作为HTTPS的默认端口,是互联网发展过程中为了推广安全连接而建立的一个重要共识和标准,它使得HTTPS能够像HTTP一样普及易用,同时提供了必要的安全保障。

HTTPS端口443在哪些地方体现或配置?

端口443作为HTTPS的核心组成部分,体现在多个层面:

  • 在浏览器中:

    这是用户最常接触但可能没有意识到的地方。当你输入一个以https://开头的网址(例如https://www.baidu.com)并且没有在后面附加端口号时,你的浏览器会自动识别https协议,并默认尝试连接该域名或IP地址的端口443。只有当你访问的是非标准端口的HTTPS服务时(例如https://example.com:8443),你才需要显式输入端口号。

  • 在服务器配置中:

    Web服务器软件(如Apache, Nginx, IIS等)需要被配置为监听(listen on)端口443。这意味着服务器程序会告诉操作系统,它准备好接收发送到其IP地址上、目标端口为443的连接请求。

    服务器的HTTPS相关配置,包括TLS/SSL证书的路径、私钥、加密套件设置等,都与监听在443端口上的服务关联。

  • 在网络设备中(如防火墙):

    为了让外部用户能够访问运行在服务器443端口上的HTTPS服务,网络路径上的防火墙需要配置规则,允许目标端口为443的TCP流量通过。如果防火墙阻止了端口443,客户端就无法与服务器建立HTTPS连接。

  • 在各种网络工具中:

    在进行网络故障排查或安全扫描时,经常需要使用工具来检查服务器的某个端口是否开放。这些工具通常需要你指定目标IP地址或域名以及要检查的端口号,端口443是检查HTTPS服务可用性时最常用的目标端口。

浏览器如何知道使用端口443?服务器如何监听?

浏览器端的默认机制:

浏览器内部有一个预设的协议与端口号的映射表。当解析一个URL时,浏览器首先识别协议部分(如httphttps)。

如果协议是https,浏览器会查询其内部映射,发现https对应的默认端口是443。然后,除非URL中明确指定了不同的端口号(例如:8443),否则浏览器在尝试与服务器建立TCP连接时,会将目标端口设置为443。

这个过程对用户是透明的,大大简化了用户访问安全网站的体验。

服务器端的监听过程:

在服务器端,Web服务器软件启动后,会执行系统调用来“绑定”并“监听”一个特定的IP地址和端口号。对于HTTPS服务,管理员会在服务器配置文件中指示Web服务器(如Apache或Nginx)去监听端口443

这个监听过程通常涉及以下几个关键点:

  1. 绑定地址和端口: 服务器程序向操作系统申请使用特定的本地IP地址和端口号(例如,0.0.0.0:443表示监听所有可用IP地址的443端口)。
  2. 进入监听状态: 绑定成功后,服务器程序进入监听状态,等待来自客户端的连接请求到达这个地址和端口。
  3. 接收连接: 当一个TCP连接请求到达服务器的443端口时,操作系统会接受这个连接,并将其传递给正在监听该端口的Web服务器进程。
  4. 处理TLS握手: 接收到连接后,服务器和客户端(浏览器)会在这个443端口上开始执行TLS/SSL握手过程。这是为了建立一个安全的加密通道。
  5. 处理加密的HTTP请求: TLS握手成功后,客户端通过这个加密通道发送HTTP请求,服务器接收并处理这些请求,然后将加密的HTTP响应通过同一通道返回给客户端。

所以,服务器并不是“神奇地”知道在443端口上提供HTTPS,而是由系统管理员通过明确的配置来指示它这样做。

如何管理或检查HTTPS端口443?

显式指定443端口在URL中:

理论上,你可以在URL中显式地写出端口号,例如 https://example.com:443

然而,由于443是HTTPS的默认端口,浏览器在遇到https://时会自动假定使用这个端口,因此显式写出:443是完全多余的,并且很少有人这样做。

显式指定端口号主要用于访问运行在非标准端口上的HTTPS服务,例如https://example.com:8443

更改默认HTTPS端口的配置:

在某些特定场景下(例如,为了让某个服务不那么容易被默认扫描到,或者在同一台服务器上运行多个需要使用TLS但协议不同的服务),管理员可能会选择将HTTPS服务配置在非443端口上。

更改服务器监听的端口号需要修改Web服务器的配置文件:

Apache HTTP Server:

在Apache的配置文件中(例如httpd.conf, apache2.conf,或位于conf.d/, sites-available/目录下的SSL相关配置文件),找到指定监听端口的指令,通常是Listen 443。将其修改为你想要的端口号(例如Listen 8443)。

同时,负责处理HTTPS请求的虚拟主机配置也需要更新端口号,例如将改为

Nginx:

在Nginx的配置文件中(通常是nginx.conf或位于conf.d/, sites-available/目录下的站点配置文件),找到监听指令,通常是listen 443 ssl;。将443修改为你想要的端口号(例如listen 8443 ssl;)。

修改完配置后,需要重启或重载Web服务器服务才能使新的端口设置生效。

重要提示: 将HTTPS服务从标准端口443移开会使得用户访问变得不便,他们必须记住并手动输入新的端口号。这通常只在非面向大众用户的内部服务或特殊测试场景下考虑。

检查服务器端口443是否开放或正在监听:

确认服务器的443端口是否可访问是排查HTTPS连接问题的重要一步。可以使用以下工具和方法:

  • 使用telnet

    在客户端的命令行中输入telnet 域名或IP地址 443

    如果连接成功,通常会显示连接信息(例如Connected to example.com.)然后是空白屏幕或乱码。这表明TCP连接已经建立,端口是开放且有服务在监听的。

    如果显示“Connection refused”或“Connect timed out”,则表示端口未开放、服务未运行或被防火墙阻挡。

  • 使用nc (Netcat):

    nc -zv 域名或IP地址 443

    这个命令通常会更简洁地报告端口是开放的(open)还是关闭的(closed)或被过滤的(filtered,通常意味着被防火墙阻挡)。

  • 使用nmap

    nmap -p 443 域名或IP地址

    Nmap是一款强大的网络扫描工具,能提供详细的端口状态信息。

  • 在服务器本机上使用ssnetstat

    登录到服务器,运行命令(可能需要root权限):

    ss -tulnp | grep 443netstat -tulnp | grep 443

    这个命令会列出所有正在监听(LISTEN)或已建立连接的TCP/UDP端口及其对应的进程ID和程序名。如果看到有进程在监听*:443或服务器特定IP的:443,说明服务正在正常运行并监听该端口。

  • 使用在线端口扫描工具:

    有许多网站提供免费的在线端口扫描服务,你可以输入你的服务器IP或域名,指定端口443进行检查,这能帮助你判断端口从互联网上是否可达。

排查443端口连接问题:

如果确认服务器的Web服务正在运行并配置监听443端口,但客户端仍然无法访问HTTPS服务,可能的原因包括:

  1. 服务器防火墙: 检查服务器操作系统自带的防火墙(如Linux的iptables/firewalld,Windows的Windows Firewall)是否允许外部流量访问TCP 443端口。
  2. 网络防火墙: 检查服务器和客户端之间的网络路径上是否存在防火墙(例如公司网络出口防火墙、云服务商的安全组规则等)阻止了443端口的流量。
  3. IP地址问题: 客户端是否连接了正确的服务器IP地址?服务器是否有多网卡或IP地址,服务是否监听在正确的IP上?
  4. 路由问题: 确保客户端到服务器的网络路由是通畅的。
  5. TLS/SSL配置问题: 即使端口通了,如果服务器证书配置错误、过期、与域名不匹配,或者加密套件不支持,TLS握手也会失败,导致连接失败或浏览器报安全错误。但这通常是发生在成功连接到443端口之后的问题。

端口443的重要性

端口443是实现现代互联网安全通信的基石。它是保障网站数据安全、用户隐私、在线交易安全的关键端口。

可以毫不夸张地说,443端口是支撑起“加密一切”愿景,构建可信互联网环境的不可或缺的关键基础设施端口。

https的端口号