當進行SSL 連接時,服務器身份驗證處于禁用狀態。在某些使用SSL 連接的庫中,默認情況下不 驗證服務器證書。這相當于信任所有證書。
對 SSL 連接時要進行服務器身份驗證的情況,示例1給出了不規范用法(Java 語言)示例。示例2 給出了規范用法(Java 語言)示例。
示例1:SimpleEmail email = new SimpleEmail();email.setHostName("smtp.testemail.com");email.setCharset("UTF-8");email.setSmtpPort(25);email.setAuthenticator(new DefaultAuthenticator(name, pwd));email.setSSLOnConnect(true);email.setFrom("test@163.com");email.setSubject("測試主題");email.setMsg("郵件內容)");email.addTo("admin@163.com");email.send();
上述代碼片段沒有明確地驗證服務器證書。
當嘗試連接到 smtp.testemail.com:25 時,此應用程序將隨時接受頒發給"hackedserver.com" 的證 書。此時,當服務器被黑客攻擊發生 SSL 連接中斷時,應用程序可能會泄露用戶敏感信息。
當進行 SSL 連接時,需要注意進行服務器驗證檢查。根據所使用的庫,驗證服務器身份并建立安 全的 SSL 連接。
示例2:SimpleEmail email = new SimpleEmail();email.setHostName("smtp.testemail.com");email.setCharset("UTF-8");email.setSmtpPort(25);email.setAuthenticator(new DefaultAuthenticator(name,pwd));email.setSSLCheckServerldentity(true);email.setSSLOnConnect(true);email.setFrom("test@163.com");email.setSubject("測試主題");email.setMsg("郵件內容)");email.addTo("admin@163.com");email.send();
上述代碼示例中,明確驗證服務器證書。