許多Linux服務(wù)器都使用TLS證書(shū),但是它們的工作方式不盡相同。
證書(shū)問(wèn)題不總是容易發(fā)現(xiàn),假設(shè)你想要登陸一臺(tái)LDAP服務(wù)器,在沒(méi)有通知任何錯(cuò)誤的情況下連接超時(shí)。也許你會(huì)認(rèn)為這是用戶賬戶出了問(wèn)題,但常常與證書(shū)相關(guān)。Linux管理員在使用不同方式部署TLS證書(shū)方面很頭疼。不好的證書(shū)會(huì)引發(fā)問(wèn)題,解決問(wèn)題取決于根本起因。
首先,檢查日志文件去分析問(wèn)題。你也需要使用像tcpdump的工具來(lái)檢查是哪個(gè)連接端口引發(fā)的網(wǎng)絡(luò)擁塞。許多協(xié)議都有一個(gè)安全和非安全端口,tcpdump可以幫助你識(shí)別。
一旦你確定了問(wèn)題在于證書(shū),定位服務(wù)器使用的具體文件,該文件中總是包含三個(gè)組件:公鑰證書(shū)、私鑰和證書(shū)授權(quán)(CA)密鑰文件。
每一個(gè)服務(wù)都有具體的配置文件用來(lái)尋找這些日志文件。例如,Apache Web Server,你的Linux分布式服務(wù)器可能使用名為mod_ssl.conf的配置文件,其中包含以下代碼行:
SSLCertificateFile /etc/pki/tls/certs/myserver.crt
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
一般的,文件后綴為.crt的是服務(wù)器證書(shū)文件。其中包含CA簽名公鑰。.key文件中包含服務(wù)器身份的私鑰。在做其它事情之前,你需要確保服務(wù)器文件存在于你期望能夠找到的配置文件當(dāng)中。
.crt文件的一個(gè)普遍的問(wèn)題是使用了未知的CA。由證書(shū)授權(quán)的公鑰證書(shū),保證了文件的可靠性和完整性。客戶已經(jīng)知道CA需要作為外部服務(wù)器。管理員通常會(huì)生成自己定義的公鑰/私鑰對(duì)。這就像是在詢問(wèn)“誰(shuí)能保證你是真正的Sander van Vugt?”“我是Sander van Vugt,既然我這樣說(shuō)了,所以你可以相信我。”這種方式并不怎么方便,是嗎?
在一些服務(wù)中,尋找自簽名證書(shū)的相關(guān)錯(cuò)誤很容易。人們使用自簽名證書(shū)連接到網(wǎng)絡(luò)服務(wù)器;服務(wù)器給出一個(gè)明文;然后終端用戶可以輕松的退出。
其他的服務(wù)錯(cuò)誤不會(huì)如此明顯。一個(gè)LDAP客戶獲得一個(gè)非受信的證書(shū)將會(huì)連接失敗,尋找問(wèn)題的原因的方式是仔細(xì)分析日志文件找到提示與CA相關(guān)錯(cuò)誤。如果找到了,找到服務(wù)器存儲(chǔ)CA證書(shū)的文件夾。確信你找到了需要的CA證書(shū),然后復(fù)制它覆蓋到原來(lái)的位置。再試一次,它就會(huì)生效了。
另一個(gè)普遍的與TLS證書(shū)相關(guān)的錯(cuò)誤,發(fā)生在證書(shū)的名字和連接的另一端目標(biāo)終端不匹配時(shí)。假設(shè)你通知了LDAP客戶連接到LDAP服務(wù)器hnl.example.com。為了確保生效,證書(shū)需要有一個(gè)主題名hnl.example.com。如果沒(méi)有主題名,連接將會(huì)失敗。一旦你知道了證書(shū)的存儲(chǔ)地點(diǎn),一般在服務(wù)器/etc/pki/tls/certs文件下。如果你想使用它,你可以使用openssl命令獲得主題名:opensslx509-text<myserver.crt | grep Subject。如果名字不符,你需要改變客戶端連接服務(wù)器的方式。
由于證書(shū)過(guò)期也會(huì)出現(xiàn)連接失敗。使用openssl x509 -text < myserver.crt命令,系統(tǒng)將會(huì)告訴你證書(shū)期限。管理員需要在證書(shū)到期日之前創(chuàng)建新的證書(shū)。