2010-08-13 85 views
8

我一直在爲SSL問題掙扎超過1個月。客戶端SSL與自簽名CA不起作用

我們使用openssl來生成我們自己的CA,服務器和客戶端證書。我們也有 使「SSLrequire」 Apache Web服務器上(在htaccess的,這可能是錯誤的),這意味着任何人都試圖通過HTTPS的 服務器上連接需要出示有效證書

步驟如下所示;

  • 產生CA密鑰
  • 生成CA CSR
  • 標誌CA CSR與CA密鑰

,所以我們有我們自己的CA,用來簽署我們的服務器和客戶端證書。

下一步

  • 生成服務器密鑰
  • 生成服務器CSR
  • 與CA密鑰
  • 跡象服務器CSR

所以我們已經把我們的服務器證書&服務器私鑰,我們成功地安裝在服務器上

接下來我們

  • 生成客戶端密鑰
  • 生成客戶端CSR
  • 簽名的客戶端與CSR CA密鑰

然後,我們的客戶端證書連同CA證書分發到我們的用戶。 兩者都安裝在他們的瀏覽器中。

當試圖連接時,我們得到了「對方不承認和信任頒發您的證書的CA. 」錯誤。

我們發現問題是服務器上未安裝自簽名CA證書。通常,服務器 將向嘗試連接到該設備的設備呈現可信CA的列表,並且該設備將不得不發送由該服務器已經呈現的任何CA簽名的證書 。但由於我們的自簽名CA證書 未安裝在服務器上,因此瀏覽器可能會提供 服務器可以接受的證書。

因此,我們繼續在服務器 - 控制面板Hsphere上安裝CA證書。

我們採取了CA證書的內容和在「證書頒發機構文件」文本區域複製它在服務器 和服務器不會接受它每次抱怨「無法更新SSL配置不同的密鑰和證書」

CA證書已由自己簽名,因此服務器如何說證書和密鑰不同。

我們也嘗試將CA證書文件和CA密鑰文件的內容複製到「證書頒發機構文件」textarea中,但這也行不通。

正如我所說,我們一直在掙扎超過一個月。如果任何人都可以提供幫助,那會非常感激。 如果我們需要支付服務費用,請告訴我們。

在此先感謝。

+0

您可能想嘗試serverfault.com,更有可能找到使用hsphere的管理員。 – sarnold 2010-08-13 11:38:21

回答

13

(也許https://serverfault.com/將是這個問題的一個更好的地方。)

以下是您可以在Apache httpd配置(我不知道這是如何映射到你的配置面板)使用的一些選項。

SSLCertificateFile  /etc/ssl/certs/host.pem 
SSLCertificateKeyFile /etc/ssl/private/host.key 
SSLCACertificatePath /etc/ssl/certs/trusteddir 
#SSLCACertificateFile /etc/ssl/certs/trustedcert.pem 
#SSLCADNRequestFile  /etc/ssl/certs/advertisedcas.pem 

SSLCertificateFileSSLCertificateKeyFile是基本的要求,在服務器上啓用SSL。

因爲你想客戶端證書身份驗證,則需要配置的SSLCACertificatePath之一(目錄)或SSLCACertificateFile(對於文件)說哪些CA要信任,所以加你有CA證書。這些應該是PEM格式的文​​件。其中的任何證書都將被視爲可信任的(儘管它可能需要具有CA基本約束,我不記得了,如果您自己已經生成了根CA證書,那麼這是非常標準的)。

除此之外,您可以將證書放入SSLCADNRequestFile。這不應該是必要的,因爲它是從SSLCACertificatePathSSLCACertificateFile證書指令自動填充的,但是如果您希望對控制檯列表中的CA進行更多控制,則可以接受服務器發佈的廣告,那是在哪裏執行的。只是爲了澄清,這不是管理客戶端證書的信任,而是服務器通告它可能信任的內容,所以您仍然需要SSLCACertificatePathSSLCACertificateFile。也許你「證書頒發機構文件」選項在您的配置面板控制,而不是其他兩個選項之一。調試這個

一種方法是做一個命令行:

echo | openssl s_client -showcerts -connect www.your.host.example:443 

這應該列出你第一次出現在證書鏈(這將有利於它呈現上滿鏈到CA ,因爲有些客戶似乎有時需要它,據我所知)。然後,它應列出它願意接受的用於客戶端證書認證的CA,或者否則客戶端證書CA名稱發送(在這種情況下,上述指令之一存在問題)。這至少會告訴您如何配置SSLCADNRequestFileSSLCACertificatePath/SSLCACertificateFile(儘管這是最後兩個問題)。

+1

可惜我只給+1:指定PEM,CA基本約束,闡明服務器信任vs客戶端信任以及openssl s_client -showcerts,每個都值得自己指出一點。 – sarnold 2010-08-13 11:56:11