Возможно соединиться с экземпляром защищенного сервера путем простого использования адреса HTTPS при вызове feval()
.
Получившаяся связь будет зашифрована, но не безопасная. Никакая сторона не выполняет аутентификации. Ни один не может определить, связывается ли это с допустимым агентом или злостным агентом.
Чтобы установить безопасное соединение, вы должны:
установите допустимые центры сертификации для аутентификации экземпляра сервера
сконфигурируйте свой код клиентского приложения, чтобы использовать установленные центры сертификации, чтобы аутентифицировать экземпляр сервера
Чтобы гарантировать добавленный уровень безопасности, можно также проверить имя хоста экземпляра сервера по общему названию сертификата.
Эти шаги позволяют вашему клиенту гарантировать, что это связывается с допустимым экземпляром MATLAB® Production Server™.
В некоторых средах экземпляры сервера также потребуют аутентификации клиента. В этих средах необходимо будет выполнить следующие шаги:
Как минимум клиент требует корневого CA сервера (Центр сертификации) в одном из хранилищ сертификатов приложения.
Чтобы соединиться с сервером, который требует клиентской аутентификации, клиенту нужен сертификат со знаком в одном из хранилищ сертификатов приложения.
Чтобы управлять центрами сертификации и сертификатами на клиентской машине, используйте OpenSSL.
Чтобы сконфигурировать ваш клиент, чтобы аутентифицировать экземпляры сервера, необходимо добавить следующее в клиентскую настройку времени выполнения:
корневой CA сервера
закрытый ключ
Если закрытый ключ зашифрован, также необходимо обеспечить пароль с закрытым ключом. После добавления необходимой информации к клиентской настройке времени выполнения проверьте, что клиент аутентифицирует экземпляр сервера.
В дополнение к минимальным требованиям можно также задать:
список аннулированных сертификатов, чтобы проверять по
если клиент должен проверить имя узла экземпляра сервера по общему названию сертификатов
Вы делаете это использование методы set на структуре mpsClientRuntime
:
setClientCertFile(mpsClientConfig* sslCfg, const char* cert_file)
задает клиентский сертификат
setPrivateKeyFile(mpsClientConfig* sslCfg, const char* pkFile)
задает закрытый ключ
setPrivateKeyPasswd(mpsClientConfig* sslCfg, const char* passwd)
задает пароль с закрытым ключом
setCAFile(mpsClientConfig* sslCfg, const char* caFile)
задает центр сертификации
setRevocationListFile(mpsClientConfig* sslCfg, const char* crlFile)
задает список аннулированных сертификатов
setVerifyHost(mpsClientConfig* sslCfg, mpsLogical verifyHost)
задает, проверяет ли клиент имя узла экземпляра сервера
setVerifyPeer(mpsClientConfig* sslCfg, mpsLogical verifyPeer)
задает, аутентифицирует ли клиент экземпляр сервера
Следующий код конфигурирует клиент, чтобы полностью аутентифицировать экземпляр сервера. Это также конфигурирует клиент, чтобы проверить, что имя узла экземпляра сервера совпадает с общим названием сертификата.
mpsClientRuntime* mpsruntime = mpsInitializeEx(MPS_CLIENT_1_1); mpsClientConfig* config; mpsStatus status1 = mpsruntime->createConfig(&config); const std::string caFile("CERT_AUTH_FILE"); mpsruntime->setCAFile(config, caFile.c_str()); const std::string crlFile("CERT_REVOCATION_LIST_FILE"); mpsruntime->setRevocationListFile(config, crlFile.c_str()); mpsruntime->setVerifyHost(config, static_cast<mpsLogical>(true)); mpsruntime->setVerifyPeer(config, static_cast<mpsLogical>(true)); mpsClientContext* context; status = mpsruntime->createContext(&context, config); ... status = mpsruntime->feval(context, "https://localhost:9911/addmatrix/addmatrix", numOut, outVal, numIn, (const mpsArray **)inVal);
Когда клиент попытается выполнить функцию, она будет обмениваться сертификатами с экземпляром сервера. Клиент проверит сертификат экземпляра сервера по сконфигурированному Приблизительно. Если сертификат будет допустим, клиент затем проверит, что имя узла экземпляра сервера совпадает с общим названием, сохраненным в сертификате экземпляра сервера. Если любая проверка перестала работать, связь отклоняется.
Если экземпляр сервера будет сконфигурирован, чтобы выполнить аутентификацию клиента, связь будет также отклонена, поскольку клиент не сконфигурирован с допустимым сертификатом, чтобы обмениваться с экземпляром сервера.
В некоторых средах экземпляры сервера требуют, чтобы клиенты предоставили сертификат для аутентификации. Позволять клиенту соединиться с экземпляром сервера, требующим аутентификации клиента:
установите клиентское свойство файла сертификата с помощью метода set setClientCertFile()
структуры mpsClientRuntime
.
Установите свойства с закрытым ключом получить доступ к клиентскому сертификату.
const std::string certFile("CERTFILE"); mpsruntime->setClientCertFile(config, certFile.c_str()); const std::string pkFile("PRIVATE_KEY_FILE"); mpsruntime->setPrivateKeyFile(config, pkFile.c_str()); const std::string pkPass("PRIVATE_KEY_PASSWORD"); mpsruntime->setPrivateKeyPasswd(config, pkPass.c_str());