2014-03-29 27 views
1

我在做什麼: 我正在嘗試MITM客戶端,他有能力連接到服務器:TLS_DH_anon_WITH_AES_256_CBC_SHA,因爲它需要創建一個只允許這種類型的認證。 我假設這是它用於簽署證書的密碼(如果有人可以請教我關於此的正確性)。安全證書Diffie-hellman匿名

如何使用此密碼生成證書?

我使用openssl,這是在實驗室環境(如果我沒有弄錯沒有人使用DH_anon)。

只是其他一些問題,客戶不檢查簽名意味着什麼?這對證書是否有效意味着什麼?

感謝

回答

2

證書將不強制使用匿名DH(ADH)的,但服務器。 而且,您不需要使用ADH的任何證書。我已經與最近IO ::插座:: SSL(1.973)在Perl試了一下:

use strict; 
use warnings; 
use IO::Socket::SSL; 
my $srv = IO::Socket::SSL->new( 
    LocalPort => 1234, 
    Listen => 10, 
    SSL_cipher_list => "ADH" 
) or die; 
my $cl = $srv->accept or die; 
print $cl $cl->get_cipher,"\n"; 

然後用openssl s_client -connect 127.0.0.1:1234 -cipher ALL連接我得到:

CONNECTED(00000003) 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 850 bytes and written 601 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ADH-AES256-SHA 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1.1 
    Cipher : ADH-AES256-SHA 
    .... 
    Verify return code: 0 (ok) 
--- 
ADH-AES256-SHA 
read:errno=0 

正如你看到的,它協商的ADH密碼併成功連接,無需證書。 爲了測試你自己,你真的需要最新版本的IO :: Socket :: SSL。

0

我想MITM客戶......在實驗室環境中...

實驗室環境應該不是難事。設置僅提供TLS_DH_anon_WITH_AES_256_CBC_SHA的流氓服務器。使用DNS將客戶端引導至流氓服務器(您甚至可以使用hosts文件執行此操作)。然後讓流氓服務器聯繫真實的服務器。流氓服務器和真實服務器可以使用任何密碼套件進行連接。


怎樣才能與此密碼的證書?

你不行。

X509證書通過授權機構或頒發機構(有時稱爲「受信任」)將公鑰綁定到實體。密鑰類型可以是RSA,DSS或ECDSA。 Certs可以包含固定的Diffie-Hellman參數,但我從來沒有使用過它們(我不相信我曾經遇到過這個參數)。目前沒有密碼套件。

TLS_DH_anon_WITH_AES_256_CBC_SHA是一個叫密碼套件的參數。它的參數像協議(SSL3,TLS1.0等)。它在SSL/TLS通道建立時進行協商。

匿名意味着臨時的Diffie-Hellman參數用於密鑰交換,的Diffie-Hellman參數是服務器簽名。 ADH還意味着無需發送服務器證書,因爲響應未被簽名。


正如斯蒂芬提到的,你可以使用OpenSSL的s_clients_server進行測試。而不是-cipher all,使用方法:

openssl s_client -connect localhost:8443 -cipher TLS_DH_anon_WITH_AES_256_CBC_SHA 

如果你想有一個TLS連接:

openssl s_client -connect localhost:8443 -servername localhost -tls1 \ 
    -cipher TLS_DH_anon_WITH_AES_256_CBC_SHA 

您還可以設置一個監聽服務器:

openssl s_server -accept 8443 -www -certform PEM -cert server-cert.pem \ 
    -keyform PEM -key server-key.pem -cipher TLS_DH_anon_WITH_AES_256_CBC_SHA 

不幸的是,對於s_server實用,由於您選擇了密碼套件,您仍然需要加載私鑰,即使它不會被使用。

0

根據定義,DH_anon密碼套件不使用證書,因此您無法爲其生成證書。

使用哪個密碼套件僅取決於可以使用的密鑰交換類型(通常是RSA或DSA)的證書。否則,這是連接本身的附加設置。

如果您想模擬客戶端願意使用的環境,您需要爲其提供一個啓用它的服務器(在大多數情況下,默認情況下它是明智禁用的)。通常,該服務器還需要禁用所有經過身份驗證的密碼套件,因爲它會嘗試選擇更好的密碼套件。這應該是您的服務器代碼上的設置(通常在SSL/TLS套接字API上)。

只是其他一些問題,客戶端不檢查簽名意味着什麼?這對證書是否有效意味着什麼?

檢查簽名通常是驗證證書的第一步:檢查它是否沒有被篡改,並且可以根據您信任的CA證書的公鑰進行驗證。 驗證或驗證包括其他步驟,例如在當前日期/時間檢查它是否有效(w.r.t.其notBefore/notAfter時間戳)並且它具有用於此目的的正確屬性。


參考文獻:TLS 1.2 Specification, Server Certificate message

The server MUST send a Certificate message whenever the agreed- 
    upon key exchange method uses certificates for authentication 
    (this includes all key exchange methods defined in this document 
    except DH_anon). 

Cipher Suite section可能會感興趣了。