使用 HTTPS 访问安全程序
调用 feval()
时只需使用 HTTPS 地址即可连接到安全的服务器实例。
生成的连接将被加密,但不安全。双方均不进行任何身份验证。两者都无法确定它是在与有效行为者还是恶意行为者进行交流。
要建立安全连接,您必须:
为服务器实例身份验证安装有效的证书颁发机构
配置客户端应用程序代码以使用已安装的证书颁发机构来验证服务器实例
为了确保增加安全级别,您还可以根据证书通用名称验证服务器实例主机名。
这些步骤可以让您的客户端确保它正在与有效的 MATLAB® Production Server™ 实例进行通信。
在服务器实例需要客户端身份验证的环境中,您需要:
为 SSL 配置客户端环境。
提出安全请求。
使用客户端身份验证发出安全请求。
为 SSL 配置客户端环境
客户端至少需要应用程序的证书存储区之一中的服务器根 CA(证书颁发机构)。
要连接到需要客户端身份验证的服务器,客户端需要应用程序证书存储区之一中的签名证书。
要管理客户端计算机上的证书颁发机构和证书,请使用 OpenSSL。
提出安全请求
要配置客户端来验证服务器实例,您需要将以下内容添加到客户端运行时配置中:
服务器根 CA
私钥
如果私钥是加密的,还需要提供私钥密码。将必要的信息添加到客户端运行时配置后,验证客户端是否对服务器实例进行了身份验证。
除了最低要求之外,您还可以指定:
要检查的证书吊销列表
如果客户端需要根据证书通用名称验证服务器实例主机名
您可以使用 mpsClientRuntime
结构体上的 setter 来执行此操作:
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);
当客户端尝试评估该函数时,它将与服务器实例交换证书。客户端将根据配置的 CA 验证服务器实例证书。如果证书有效,客户端将验证服务器实例主机名是否与服务器实例证书中存储的通用名称匹配。如果任一检查失败,则连接被拒绝。
如果服务器实例配置为执行客户端身份验证,则连接也将被拒绝,因为客户端没有配置有效的证书来与服务器实例交换。
使用客户端身份验证发出安全请求
在某些环境中,服务器实例要求客户端提供证书进行身份验证。要使客户端能够连接需要客户端身份验证的服务器实例,请执行以下操作:
使用
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());