我在做什麼: 我正在嘗試MITM客戶端,他有能力連接到服務器:TLS_DH_anon_WITH_AES_256_CBC_SHA,因爲它需要創建一個只允許這種類型的認證。 我假設這是它用於簽署證書的密碼(如果有人可以請教我關於此的正確性)。安全證書Diffie-hellman匿名
如何使用此密碼生成證書?
我使用openssl,這是在實驗室環境(如果我沒有弄錯沒有人使用DH_anon)。
只是其他一些問題,客戶不檢查簽名意味着什麼?這對證書是否有效意味着什麼?
感謝
我在做什麼: 我正在嘗試MITM客戶端,他有能力連接到服務器:TLS_DH_anon_WITH_AES_256_CBC_SHA,因爲它需要創建一個只允許這種類型的認證。 我假設這是它用於簽署證書的密碼(如果有人可以請教我關於此的正確性)。安全證書Diffie-hellman匿名
如何使用此密碼生成證書?
我使用openssl,這是在實驗室環境(如果我沒有弄錯沒有人使用DH_anon)。
只是其他一些問題,客戶不檢查簽名意味着什麼?這對證書是否有效意味着什麼?
感謝
證書將不強制使用匿名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。
我想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_client
和s_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
實用,由於您選擇了密碼套件,您仍然需要加載私鑰,即使它不會被使用。
根據定義,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可能會感興趣了。