如何检测我的服务是使用 SSL 还是 TLS 以及哪个版本
How can I detect if my service is using SSL or TLS and which version
有一些选项可以在 weblogic 服务器和通过 HTTPS 通信[侦听]的网络服务器上指定 TLS 或 SSL。
我无权访问网络或应用程序服务器配置,但我想确定我通过 HTTPS 与网络服务器 [nginx、apache http 网络服务器] 或应用程序服务器 [weblogic] 的连接是否使用 SSL 或 TLS 以及哪个版本它。
如果&如何确定?欢迎推荐。
如果您无法为您的服务使用某些在线工具,或者您的服务未托管到 public 互联网,那么您可以尝试一些方法。
您可以将 nmap
用作 nmap -sV --script ssl-enum-ciphers -p <port> <host>
来查看哪些 TLS 版本,尤其是您的服务器响应的密码。
如果您没有 nmap 或者您不允许在您的系统上安装 nmap 服务是可访问的,那么您可以使用一些默认工具来查看可用的密码。
例如:
openssl
:可以使用openssl连接服务器,可以在命令行指定ssl密码。
例如:
$ openssl s_client -connect <host>:<port> -tls1_2 -cipher AES128-GCM-SHA256
如果您看到连接成功,则可以确定服务器能够使用该 TLS 版本(示例中的 TLSv1.2
)以及使用该密码(示例中的 TLS_RSA_WITH_AES_128_GCM_SHA256
)进行协商例子。
您可以找到对 openssl here 有效的所有密码。示例 运行 如下所示:
$ openssl s_client -connect example.com:443 -tls1_2 -cipher AES128-GCM-SHA256
CONNECTED(00000005)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, OU = Technology, CN = www.example.org
verify return:1
---
Certificate chain
....
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN
...
0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
No client certificate CA names sent
---
SSL handshake has read 4297 bytes and written 408 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
...
TLS session ticket:
0000 - 57 04 cc 0f 69 dc 93 6c-e5 d6 50 0a 1c d0 d8 ce W...i..l..P.....
...
0090 - 9a 34 af 1e c2 09 cf 00-6d 68 36 41 09 40 de 0a .4......mh6A.@..
Start Time: 1558594372
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
curl
:你可以用curl做同样的事情。例如:
$ curl https://example.com --tlsv1.2 --ciphers AES128-GCM-SHA256 -w "%{http_code}\n" -o /dev/null -s
在这种情况下,您将获得作为有效响应代码的输出,如果连接成功则为 200
,如果握手失败则为 000
,因此您可以使用它来区分。
注意:openssl
和 curl
中支持的 TLS 版本可以通过检查两种情况下的 --help
来查找。例如:
卷曲:
-1, --tlsv1 Use >= TLSv1 (SSL)
--tlsv1.0 Use TLSv1.0 (SSL)
--tlsv1.1 Use TLSv1.1 (SSL)
--tlsv1.2 Use TLSv1.2 (SSL)
--tlsv1.3 Use TLSv1.3 (SSL)
openssl:
-tls1_2 - just use TLSv1.2
-tls1_1 - just use TLSv1.1
-tls1 - just use TLSv1
-dtls1 - just use DTLSv1
有一些选项可以在 weblogic 服务器和通过 HTTPS 通信[侦听]的网络服务器上指定 TLS 或 SSL。
我无权访问网络或应用程序服务器配置,但我想确定我通过 HTTPS 与网络服务器 [nginx、apache http 网络服务器] 或应用程序服务器 [weblogic] 的连接是否使用 SSL 或 TLS 以及哪个版本它。
如果&如何确定?欢迎推荐。
如果您无法为您的服务使用某些在线工具,或者您的服务未托管到 public 互联网,那么您可以尝试一些方法。
您可以将 nmap
用作 nmap -sV --script ssl-enum-ciphers -p <port> <host>
来查看哪些 TLS 版本,尤其是您的服务器响应的密码。
如果您没有 nmap 或者您不允许在您的系统上安装 nmap 服务是可访问的,那么您可以使用一些默认工具来查看可用的密码。 例如:
openssl
:可以使用openssl连接服务器,可以在命令行指定ssl密码。 例如:$ openssl s_client -connect <host>:<port> -tls1_2 -cipher AES128-GCM-SHA256
如果您看到连接成功,则可以确定服务器能够使用该 TLS 版本(示例中的 TLSv1.2
)以及使用该密码(示例中的 TLS_RSA_WITH_AES_128_GCM_SHA256
)进行协商例子。
您可以找到对 openssl here 有效的所有密码。示例 运行 如下所示:
$ openssl s_client -connect example.com:443 -tls1_2 -cipher AES128-GCM-SHA256
CONNECTED(00000005)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, OU = Technology, CN = www.example.org
verify return:1
---
Certificate chain
....
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN
...
0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
---
No client certificate CA names sent
---
SSL handshake has read 4297 bytes and written 408 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
...
TLS session ticket:
0000 - 57 04 cc 0f 69 dc 93 6c-e5 d6 50 0a 1c d0 d8 ce W...i..l..P.....
...
0090 - 9a 34 af 1e c2 09 cf 00-6d 68 36 41 09 40 de 0a .4......mh6A.@..
Start Time: 1558594372
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
curl
:你可以用curl做同样的事情。例如:
$ curl https://example.com --tlsv1.2 --ciphers AES128-GCM-SHA256 -w "%{http_code}\n" -o /dev/null -s
在这种情况下,您将获得作为有效响应代码的输出,如果连接成功则为 200
,如果握手失败则为 000
,因此您可以使用它来区分。
注意:openssl
和 curl
中支持的 TLS 版本可以通过检查两种情况下的 --help
来查找。例如:
卷曲:
-1, --tlsv1 Use >= TLSv1 (SSL)
--tlsv1.0 Use TLSv1.0 (SSL)
--tlsv1.1 Use TLSv1.1 (SSL)
--tlsv1.2 Use TLSv1.2 (SSL)
--tlsv1.3 Use TLSv1.3 (SSL)
openssl:
-tls1_2 - just use TLSv1.2
-tls1_1 - just use TLSv1.1
-tls1 - just use TLSv1
-dtls1 - just use DTLSv1