Настройте конфигурацию безопасности

Объект 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 выполнить авторизацию сервера на основе сертификата сервера

Задайте Enabled протоколы шифрования

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, которая действительно выполняет проверки авторизации.