UE4.24源码编译HTML5时如何为CentOS8.3服务器的libwebsockets启用SSL
问题解答
编译相关疑问解答
1. 能否通过设置SSL编译标志+HTML5Setup.sh全量编译实现需求?
不能。HTML5Setup.sh是UE针对Web/HTML5平台的依赖编译脚本,和你要构建的Linux专属服务器目标无关。
正确的编译标志配置流程如下:
- 首先在你专属服务器的
*.Target.cs文件中添加全局定义:GlobalDefinitions.Add("WITH_SSL=1"); bEnableSSL = true; - 你之前修改的
WebSockets.Build.cs代码逻辑正确,但是需要先清理引擎缓存:删除Engine/Intermediate、Engine/Binaries/ThirdParty/libwebsockets目录下对应Linux平台的所有中间文件和旧库文件,再触发编译,才会重新走libwebsockets的带SSL编译流程。
2. 能否通过Visual Studio项目/引擎层面配置实现需求?
可以,无需手动执行第三方库的编译脚本,UE的UnrealBuildTool(UBT)会自动处理依赖编译:
- 完成上述
*.Target.cs的配置修改后,在Visual Studio的解决方案资源管理器中,右键你的专属服务器构建目标,选择清理,再选择生成即可。 - 你遇到的libwebsockets编译失败问题,大概率是Windows上安装的Linux跨平台编译工具链版本和当前UE版本不匹配导致,请优先安装UE官方对应版本的Linux cross-compile工具链。如果仍编译失败,可以直接在CentOS 8.3环境下编译好带SSL支持的libwebsockets静态库,替换到引擎
Engine/Source/ThirdParty/libwebsockets/lib/Linux/x86_64-unknown-linux-gnu目录下,跳过UE的自动编译流程。
SSL证书配置方式
编译完带SSL支持的版本后,证书无需在编译环节配置,在服务端运行环节配置即可,有两种实现方式:
- 命令行参数配置:启动专属服务器时添加启动参数
./你的服务端进程 -SSLcertificate=/path/域名.crt -SSLprivatekey=/path/私钥.key -SSLcaCertificate=/path/CA根证书.pem - 代码中指定:在服务端初始化WebSocket/HTTP服务的代码中传入证书路径,以UWebSocketsServer为例:
FWebServerConfig ServerConfig; ServerConfig.bUseSSL = true; ServerConfig.SSLCertPath = TEXT("/path/域名.crt"); ServerConfig.SSLPrivateKeyPath = TEXT("/path/私钥.key"); ServerConfig.SSLCAPath = TEXT("/path/CA根证书.pem"); auto Server = UWebSocketsServer::CreateServer(ServerConfig);
关于无需修改WITH_SSL即可生效的逻辑说明
部分旧版本UE的WebSockets模块Build.cs中内置了自动检测逻辑:如果当前构建目标链接了OpenSSL库,且目标为服务器类平台,会自动添加WITH_SSL=1的编译定义,不需要手动修改配置。因此只要你编译了带SSL支持的libwebsockets和OpenSSL库,UBT会自动开启SSL能力,无需额外修改WITH_SSL相关配置。
内容的提问来源于stack exchange,提问作者Nikola Lukic
相关产品推荐
相关产品推荐

