我刚刚在某媒体数据中心的IT治理频道看到,关于Linux服务器TLS证书故障解决方法,分享给各位同学。
许多Linux服务器都使用TLS证书,但是它们的工作方式不尽相同。
证书问题不总是容易发现,假设你想要登陆一台LDAP服务器,在没有通知任何错误的情况下连接超时。也许你会认为这是用户账户出了问题,但常常与证书相关。Linux管理员在使用不同方式部署TLS证书方面很头疼。不好的证书会引发问题,解决问题取决于根本起因。
首先,检查日志文件去分析问题。你也需要使用像tcpdump的工具来检查是哪个连接端口引发的网络拥塞。许多协议都有一个安全和非安全端口,tcpdump可以帮助你识别。
一旦你确定了问题在于证书,定位服务器使用的具体文件,该文件中总是包含三个组件:公钥证书、私钥和证书授权(CA)密钥文件。
每一个服务都有具体的配置文件用来寻找这些日志文件。例如,Apache Web Server,你的Linux分布式服务器可能使用名为mod_ssl.conf的配置文件,其中包含以下代码行:
SSLCertificateFile /etc/pki/tls/certs/myserver.crt
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
一般的,文件后缀为.crt的是服务器证书文件。其中包含CA签名公钥。.key文件中包含服务器身份的私钥。在做其它事情之前,你需要确保服务器文件存在于你期望能够找到的配置文件当中。
.crt文件的一个普遍的问题是使用了未知的CA。由证书授权的公钥证书,保证了文件的可靠性和完整性。客户已经知道CA需要作为外部服务器。管理员通常会生成自己定义的公钥/私钥对。这就像是在询问“谁能保证你是真正的Sander van Vugt?”“我是Sander van Vugt,既然我这样说了,所以你可以相信我。”这种方式并不怎么方便,是吗?
在一些服务中,寻找自签名证书的相关错误很容易。人们使用自签名证书连接到网络服务器;服务器给出一个明文;然后终端用户可以轻松的退出。
其他的服务错误不会如此明显。一个LDAP客户获得一个非受信的证书将会连接失败,寻找问题的原因的方式是仔细分析日志文件找到提示与CA相关错误。如果找到了,找到服务器存储CA证书的文件夹。确信你找到了需要的CA证书,然后复制它覆盖到原来的位置。再试一次,它就会生效了。
另一个普遍的与TLS证书相关的错误,发生在证书的名字和连接的另一端目标终端不匹配时。假设你通知了LDAP客户连接到LDAP服务器hnl.example.com。为了确保生效,证书需要有一个主题名hnl.example.com。如果没有主题名,连接将会失败。一旦你知道了证书的存储地点,一般在服务器/etc/pki/tls/certs文件下。如果你想使用它,你可以使用openssl命令获得主题名:opensslx509-text
由于证书过期也会出现连接失败。使用openssl x509 -text < myserver.crt命令,系统将会告诉你证书期限。管理员需要在证书到期日之前创建新的证书。