我正在用 java 制作一個 TLS 客戶端,并使用x509TrustManager checkServerTrusted方法來驗證服務器證書是否可信。
void checkServerTrusted(X509Certificate[] chain,
String authType)
throws CertificateException
authType - the key exchange algorithm used
檔案提到它使用 authType 引數,該引數指定使用的密鑰交換演算法。這對 TLS1.2 來說是有意義的,因為可以從所選密碼中找出密鑰交換演算法。但是TLS1.3沒有密鑰交換演算法的情況下,authType的值應該是多少呢?使用此方法使用 TLS1.3 時如何驗證證書?我正在使用 openJDK 8。
uj5u.com熱心網友回復:
這是“未知”。注意實際的證書路徑驗證和名稱檢查與較低的協議相同;1.3 服務器未指定使用包含密鑰和(可能)與較低協議中的密鑰交換匹配的 KeyUsage 的證書,只是一個具有簽名能力并與客戶端提供的 signature_algorithms 值之一匹配的證書 - 并且 JSSE 客戶端提供所有,至少假設有一個 EC 提供程式可用,這在 j7 up 中通常是這種情況。(僅限 1.2,指定服務器證書以匹配 sigalgs和keyexchange。)
AFAICS 默認驗證器(即當您使用 TrustManagerFactory 時)實際上根本不檢查此值,盡管它在存在時對 sigalgs 應用了約束(即在 1.2 或 1.3 中)。TLS 規范不要求客戶端檢查這一點,甚至 1.3 也不需要,它通常比早期版本需要更多的接收器檢查(即 antiPostelianism)。(OTOH 默認的X509[Extended]KeyManager確實使用了類似的 keyType[s] 引數。)
PS:您的意思是您正在呼叫標準(X509)TM 來驗證證書嗎?如果是這樣,您不需要;JSSE 已經做到了。還是您的意思是您正在提供自己的implements X509TrustManager要呼叫的類?如果是這樣,您應該知道在 7 中(如您所鏈接的)JSSE 將添加“端點識別”,即在適用于提供的 X509TM 的情況下檢查主機名。如果您想自己控制它,則必須改為extends X509ExtendedTrustManager在您鏈接的頁面頂部鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477675.html
上一篇:如何在perform_create中使用Validator來限制DjangoRestFramework的影像上傳大小?
