許多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<myserver.crt | grep Subject。如果名字不符,你需要改變客戶端連接服務器的方式。
由于證書過期也會出現連接失敗。使用openssl x509 -text < myserver.crt命令,系統將會告訴你證書期限。管理員需要在證書到期日之前創建新的證書。