平台: 所有平台 适用于: COMSOL 模型管理器, COMSOL 模型管理器服务器, COMSOL Multiphysics® 版本:

问题描述

我希望通过安全连接在 COMSOL Multiphysics 中连接服务器,例如连接“模型管理器服务器”数据库,或通过方法代码使用 HTTPS 向 Web 服务器发送请求,但收到错误消息 "unable to find valid certification path to requested target"。

解决方法

这个错误消息说明 COMSOL Multiphysics 所使用的 Java runtime 不信任该服务器证书。请根据安装 COMSOL Multiphysics 的操作系统,按照以下操作说明进行操作,以确保服务器证书被信任。

您也可以联系服务器管理员,要求其在服务器证书中加入由公共证书颁发机构 (CA) 签发的信任链。这样,Java runtime 通常会自动信任该证书。

信任服务器证书

首先,需要确定服务器证书链的根证书,通常为您所在组织的本地 CA 证书。如果尚未以文件形式获取该证书,请参见下文“获取服务器的证书链”。

待信任的证书可以存放在运行“模型管理器服务器”的计算机上的任意临时位置。证书导入信任存储库后(如下所述),将不再使用该证书文件,您可以将其从临时位置移除。

在 Windows(限 COMSOL 6.2 及更高版本)上

从 6.2 版本开始,COMSOL Multiphysics 使用 Windows 操作系统内置的信任存储库,因此,您只需将根证书导入 Windows 信任存储库即可。

  1. 在 Windows 中启动内置的 certlm.msc 工具,然后导航至受信任的根证书颁发机构 > 证书文件夹。
  2. 操作菜单中选择导入,然后单击下一步以指定要导入的文件。
  3. 单击浏览或键入证书路径,将其作为受信任的根证书导入。
  4. 依次单击下一步下一步完成,并确认该证书显示在列表中。

在 Linux®、macOS 或 Windows(限 COMSOL 6.1 及更低版本)上

在 Linux 和 macOS 系统(以及安装了 COMSOL 6.1 及更低版本的 Windows 系统)中,COMSOL Multiphysics 使用安装目录中 Java runtime 自带的信任存储库。

  1. 找到 COMSOL Multiphysics 安装目录中包含的 Java keytool 的路径。
    • 在 Linux 系统中,默认路径为:/usr/local/comsol62/multiphysics/java/glnxa64/jre/bin/keytool
    • 在 macOS 系统中,默认路径为:/Applications/COMSOL62/Multiphysics/java/maci64/jre/bin/keytool
    • 在 Windows 系统中,默认路径为:C:\Program Files\COMSOL\COMSOL62\Multiphysics\java\win64\jre\bin\keytool.exe
    • 如果使用基于 ARM64 的平台,请将 glnxa64maci64 分别替换为 glnxarm64macarm64
  2. 使用 -importcert -cacerts -file myrootcert.pem -alias myrootcert 变元运行 keytool,其中 -file 变元应指向要导入的根证书,-alias 是该根证书在信任存储库中的别名。
    • 运行该命令时需要具有对安装目录的写权限。
    • 使用的别名必须在密钥库中唯一,无需与文件名一致。如果要导入多个根证书,请为每个证书设置不同的别名。
  3. 输入 Java cacerts 文件的密码,默认为 changeit
  4. 查看证书信息,如系统询问是否导入,请回答 yes
    • 如果出现 "Certificate not imported, alias already exists" 错误,表示该别名已被使用。请更换别名,或使用 -delete -cacerts -alias myrootcert 先删除现有根证书,再导入一个新证书。

注:如果系统中安装有多个 COMSOL 软件版本,请务必找到所用版本的 COMSOL Multiphysics 安装目录,并从该目录下的 Java runtime 运行 keytool。即使在连接“模型管理器服务器”的情况下,也只需确保 COMSOL Multiphysics 信任该服务器的证书,而无需在“模型管理器服务器”安装中执行该操作。

获取服务器的证书链

COMSOL Multiphysics 安装包中已包含 Java keytool,其默认路径详见前文信任服务器证书 一节。

  1. 运行带有变元 -printcert -rfc -sslserver hostname:portkeytool,其中 hostname:port 是服务器的主机名和安全端口。
    • 如果出现 "No certificate from the SSL server" 错误,请确认主机名填写正确(不包含 https:// 前缀),并确保所用端口为安全端口,而不是服务器上非安全的 HTTP 端口。
  2. 输出应为以 -----BEGIN CERTIFICATE----- 开头、以 -----END CERTIFICATE----- 结尾的代码块。将最后一个此类块复制到剪贴板,通常这是对应于证书链的根证书。
  3. 将该代码块粘贴至文本编辑器中,并将文件保存为 myrootcert.pem,并存放在任意临时位置。

注: 请确保在受信任的网络环境中连接服务器,否则可能存在通过中间人攻击获取伪造证书链的风险。为了降低此类攻击的风险,建议在获取证书链后,通过可信渠道与服务器管理员沟通,以验证根证书的指纹信息,再决定是否信任该证书。