如何在 Linux RHEL 5.3 上找到启用 SSL 的端口或 SSL 实例

Dom*_*iqs 6 openssl

我正在尝试对在我们的 Linux RHEL 5.3 服务器上运行的启用 SSL 的端口/服务进行审计。我正在尝试查找我们服务器上的哪些端口启用了 SSL。我不知道如何找到它。我需要知道如何检查哪些端口正在使用启用 SSL 的服务。

我已经运行了下面的命令

lsof -i -n -P
netstat -ntulp 
netstat -nap  
Run Code Online (Sandbox Code Playgroud)

但是从这些输出中我不确定如何确定哪些端口正在运行 SSL。我不知道该找什么。

我知道 SSLscan 实用程序,但是当我运行它时,它不返回任何值并吐出错误“无法在端口 443 上打开与主机 127.0.0.1 的连接”

SSLscan 似乎在我们的 Windows 环境中工作没有任何错误,但不是 Linux。我也知道 nmap 但出于安全原因不能在我们的环境中使用它。

Bru*_*uno 6

我不确定是否有自动化的方法来做到这一点。

首先,我会列出所有正在侦听的端口并将端口与进程/可执行文件匹配(例如,使用netstat -t -l -p, 作为 root 能够查看进程 ID (PID))。

[编辑]

你会得到这样的条目,其中 PID 是:

tcp        0      0 *:https            *:*                LISTEN      5221/apache2
Run Code Online (Sandbox Code Playgroud)

这会告诉您哪个程序正在端口上运行https。(netstat -t -l -p -n如果您只想要端口号,请使用,在这种情况下,您将看到*:443而不是*:https)。这告诉您有一个套接字在侦听端口 443。此外,这里 5221 是 apache2 的 PID,因此也告诉您正在使用哪个应用程序。有时,可能无法立即看到正在使用哪个应用程序(例如,您可以查看 的内容/proc/5221/cmdline以查看更多详细信息)。

我只会关注绑定到外部接口的localhost条目(并忽略这些条目)。

通常,您可能会在端口 22 (ssh)、80 (http)、443 (https)、...

然后,您必须根据下面描述的方法一一测试它们。

例如,echo "" | openssl s_client -connect your.host.name:80应该显示错误消息,因为您的 Web 服务器不会(或不应该)侦听此端口上的 SSL/TLS 请求,echo "" | openssl s_client -connect your.host.name:443应该可以工作并向您显示有关证书和连接的一些信息。

[/编辑]

对于前期 SSL/TLS,您可以检查它是否会接受 TLS ClientHello(即从连接开始就成为 TLS 服务器),但是使用echo "" | openssl s_client -connect hostname:port(echo "" |是可选的,它会在建立连接后立即停止 openssl ,因为您可能不想发送任何特定内容)。

对于“升级”的 SSL/TLS 连接,在应用程序协议级别(例如STARTTLS)的命令之后完成,这可能会更棘手。

您可以通过添加-starttls the_name_of_the_protocol到此openssl s_client命令来执行此操作。根据 OpenSSL 文档,“目前,唯一支持的 [协议名称] 是“smtp”、“pop3”、“imap”和“ftp” ”。

这对 LDAP(如果配置为使用 Start TLS 而不是 pre-front TLS)、MySQL、PostgreSQL 等无济于事,...对于这些,您可能只需要查看它们各自的配置文件。自动化这个过程需要一个能够理解所有这些协议的工具,这可能非常困难。

补充几点,如果是为了更一般的安全审计:

  • 启用 SSL/TLS 是不够的。您还想确保它配置正确:有效证书,禁用 SSLv2,如果您的用户群足够,则尝试通过禁用旧版本来移动到更高的 SSL/TLS 值(SSLv3、TLSv1.0、TLSv1.1+)如果可能,禁用兼容的、不安全的重新协商,相当强大的密码套件。

  • 尽管使用了 OpenSSL 库,但 OpenSSH(以及一般的 SSH)并不基于 SSL/TLS。即使您的策略是使用 SSL/TLS-only 服务,您可能仍希望保留此服务。