OpenSSL:获取SQL Server公共证书

Yas*_*Agl 8 sql-server openssl certificate

我想使用OpenSSL或任何本机Linux命令来获取SQL Server的证书.我尝试的方式与使用HTTP服务器的方式相同但不起作用.

openssl s_client -showcerts -connect MY.MSSQL.SERVER:1433
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 249 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
Run Code Online (Sandbox Code Playgroud)

Ros*_*ser 13

github 用户 lnattrass 的要点给出了一个 python 脚本,该脚本是“连接到 MS SQL Server 并将证书转储为 PEM 的糟糕方法”(他的措辞)。是的,这不是你问的,你问的是 OpenSSL。但其中一条评论部分指出

我能够使用 openssl 获得相同的结果,如下所示:openssl s_client -showcerts -connect <hostname>:<port> </dev/null 2>/dev/null|openssl x509 -outform PEM >dbcertfile.pem正如某处所建议的。

(不知道“某处”在哪里。)

我尝试过 openssl 方法,但对我来说失败了:

rpresser@11MTLDEV-L11626:~$ openssl s_client -showcerts -connect mysqlserver.mydomain.com:1433 </dev/null 2>/dev/null|openssl x509 -outform PEM >dbcertfile.pem
unable to load certificate
140246796931520:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
Run Code Online (Sandbox Code Playgroud)

也许这是因为自签名证书(见下文)不受信任?我真的不确定。

修复了一个缩进错误后,python 方法对我有用:

rpresser@11MTLDEV-L11626:/mnt/c/temp$ python3 get_tds_cert.py redacted.domain.COM 1433
# get_tdspacket: 0, tdspacket 长度: 43
# header: {'type': 4, 'status': 1, 'length': 43, 'channel': 0, 'packet': 1, 'window': 0}
# 剩余 tdspbuf 长度: 0

# 启动 TLS 握手循环..
# 震动 (0/5)

# get_tdspacket: 0, tdspacket 长度: 894
# header: {'type': 18, 'status': 1, 'length': 894, 'channel': 0, 'packet': 0, 'window': 0}
# 剩余 tdspbuf 长度: 0

# 震动 (1/5)

# get_tdspacket: 0, tdspacket 长度: 67
# header: {'type': 18, 'status': 1, 'length': 67, 'channel': 0, 'packet': 0, 'window': 0}
# 剩余 tdspbuf 长度: 0

# 握手完成,转储证书
-----开始证书-----
MIIB+zCCAWSgAwIBAgIQYc0YElx/YYFF/Q0PIYETxDANBgkqhkiG9w0BAQUFADA7
MTkwNwYDVQQDHjAAUwBTAEwAXwBTAGUAbABmAF8AUwBpAGcAbgBlAGQAXwBGAGEA
BABsAGIAYQBjAGswIBcNMjAwMjAyMDQ0NzA5WhgPMjA1MDAyMDIwNDQ3MDlaMDsx
OTA3BgNVBAMeMABTAFMATABfAFMAZQBsAGYAXwBTAGkAZwBuAGUAZABfAEYAYQBs
AGWAYgBhAGMAazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAohSQbug4qZug
ji16iKuNpX4OzGc9DPAORaho8LB2AGinol+rEmcTGRofeIg9zeXMbiOwWbrCnT3/
RUDLOW6V4papZ7H/qIcmVIKdzNCezWMlfPd0h4S00kVovHDIbC1t2uhcDdfEIsh+
fbgzS34bkXNACurtV5t8kpPWYDsRwqsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBr
qfAph+/NF6Cgxisp7UHq9kjQ6sSYNCIXfq9mJnRqX+I8H6nxSQfpDlljdvKN3GYeg
SL4jowNL11z5xjpJS9/KhLFwodicWKt0Go/CqusPWJKVJo0HgIn9a1hHPipRbR8w
3+QRy50kaPXm5VOoSg83+CjEg9ri7jfgtWLetq+xoQ==
-----证书结束-----

我没有费心去编辑证书,因为它是SQL Server 自签名后备,如SSLShopper 证书解码器所示

  • 证书信息:
  • 通用名称:SSL_Self_Signed_Fallback
  • 生效日期:2020 年 2 月 1 日
  • 有效期至:2050 年 2 月 1 日 序列号:61cd18125c7f618145fd0d0f218113c4

  • 实际上有两个需要更正,在 GitHub 上的评论中指出:删除第 62 行上的缩进,并将第 44 行移动到其下面的 for 循环内。懒人可以从[更正的叉子](https://gist.github.com/Scherlac/0f048eb8f2aab274a903dcda5acbd99f)复制并粘贴。 (2认同)