Объект MWSSLConfig
предоставляет информацию, чтобы сконфигурировать HTTPS. Клиентский API Java® обеспечивает реализацию MWSSLConfig
по умолчанию, MWSSLDefaultConfig
, который он использует, когда никакая настройка SSL не передается конструктору MWHTTPClient
. Объект MWSSLDefaultConfig
реализован таким образом что:
getSSLContext()
возвращает объект SSLContext
по умолчанию, созданный JRE.
getHostnameVerifier()
возвращает реализацию HostnameVerifier
, которая всегда возвращает false. Если верификация имени узла HTTPS перестала работать, это не заменяет решение.
getServerAuthorizer()
возвращает реализацию MWSSLServerAuthorizer
, которая авторизовывает все экземпляры MATLAB® Production Server™.
Вы расширяете класс MWSSLDefaultConfig
к:
задайте протоколы системы защиты, которые может использовать клиент
настройте, как клиент проверяет имена узлов
задайте дополнительную логику аутентификации сервера
Класс MWSSLDefaultConfig
имеет три метода:
getSSLContext()
— Возвращает объект SSLContext
getHostnameVerifier()
— Возвращает объект HostnameVerifier
использовать, если верификация имени узла HTTPS перестала работать
getServerAuthorizer()
— Возвращает объект MWSSLServerAuthorizer
выполнить авторизацию сервера на основе сертификата сервера
MATLAB Production Server поддерживает следующие протоколы шифрования:
TLSv1.0
TLSv1.1
TLSv1.2
SSLv3.0
SSLv2.0.
По умолчанию все протоколы включены. Если вы хотите управлять, какие протоколы включены, вы заменяете метод getSSLContext()
, чтобы возвратить экземпляр MWCustomSSLContext
со списком активированных протоколов. Протоколы не в списке не включены. Например, чтобы избежать уязвимости POODLE путем отключения протоколов SSL, вы включаете протоколы TLS.
import javax.net.ssl.SSLContext; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import com.mathworks.mps.client.*; public class MySSLConfig extends MWSSLDefaultConfig { public SSLContext getSSLContext() { try { final SSLContext context = MWCustomSSLContext.getInstance("TLSv1", "TLSv1.1", "TLSv1.2"); context.init(null,null,null); return context; } catch (NoSuchAlgorithmException e) { return null; } catch (KeyManagementException e) { return null; } } }
Как часть квитирования SSL, слой HTTPS пытается совпадать с именем узла в обеспеченном URL к имени узла, обеспеченному в сертификате сервера. Если эти два имен узлов не соответствуют, слой HTTPS вызывает метод HostnameVerifier.verify()
как дополнительную проверку. Возвращаемое значение метода HostnameVerifier.verify()
определяет, проверяется ли имя узла.
Реализация метода HostnameVerifier.verify()
, предоставленного объектом MWSSLDefaultConfig
всегда, возвращает false
. Результат - это, если имя узла в URL и имя узла в сертификате сервера не соответствуют, сбои квитирования HTTPS.
Для более устойчивой схемы верификации имени узла расширьте класс MWSSLDefaultConfig
, чтобы возвратить реализацию HostnameVerifier.verify()
, который использует пользовательскую логику. Например, если вы только хотели сгенерировать один сертификат для всех серверов, на которых запущенных экземплярах MATLAB Production Server, вы могли задать MPS
для имени узла сертификата. Затем ваша реализация HostnameVerifier.verify()
возвращает true, если именем узла, сохраненным в сертификате, является MPS
.
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; import com.mathworks.mps.client.*; public class MySSLConfig extends MWSSLDefaultConfig { public HostnameVerifier getHostnameVerifier() { return new HostNameVerifier() { public boolean verify(String s, SSLSession sslSession) { if (sslSession.getPeerHost().equals("MPS")) return true; else return false; } } } }
Для получения дополнительной информации о HostnameVerify
см. Документацию Oracle Java.
После того, как слой HTTPS устанавливает безопасное соединение, клиент может выполнить дополнительный шаг аутентификации прежде, чем отправить запросы к серверу. Реализация интерфейса MWSSLServerAuthorizer
выполняет эту дополнительную аутентификацию. Реализация MWSSLSServerAuthorizer
выполняет две проверки, чтобы авторизовать сервер:
isCertificateRequired()
определяет, должны ли серверы представить сертификат для авторизации. Если это возвращает true, и сервер не предоставил сертификат, клиент не авторизовывает сервер.
authorize(Certificate serverCert)
использует сертификат сервера, чтобы определить, разрешает ли клиент сервер обрабатывать запросы.
Реализация MWSSLSServerAuthorizer
, возвращенная объектом MWSSLDefaultConfig
, авторизовывает все серверы, не выполняя проверок.
Чтобы использовать аутентификацию сервера, расширьте класс MWSSLDefaultConfig
и замените реализацию getServerAuthorizer()
, чтобы возвратить реализацию MWSSLSServerAuthorizer
, которая действительно выполняет проверки авторизации.