使用Genexus 17(C#)命令行调用API遇SSL/TLS安全通道创建失败
解决命令行程序SSL/TLS安全通道创建失败问题
1. 使用app.config配置(.NET Framework环境)
命令行程序的配置文件为app.config(编译后会生成与程序同名的.exe.config文件,需放在可执行文件同一目录下),添加以下配置项,和Web端web.config的配置逻辑一致:
方式一:启用强加密算法
<configuration> <runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> </runtime> <system.net> <settings> <servicePointManager checkCertificateRevocationList="false" /> </settings> </system.net> </configuration>
方式二:强制指定SSL/TLS版本
<configuration> <appSettings> <add key="System.Net.ServicePointManager.SecurityProtocol" value="Tls12,Tls13" /> </appSettings> </configuration>
2. 代码层面强制设置(配置文件不生效时)
如果配置文件方式无效,可在程序初始化阶段(比如入口逻辑开头)添加C#代码,强制指定SSL/TLS版本:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13; // 仅测试环境可选:禁用证书吊销检查,生产环境不建议开启 System.Net.ServicePointManager.CheckCertificateRevocationList = false;
在Genexus中,可将这段代码放在程序的启动事件或首次调用API的逻辑中。
3. 排查环境与权限差异
- 命令行程序的运行账户和Web面板的运行账户(如IIS应用池账户)可能不同,需确认该账户是否有权限访问目标API,以及能否读取证书存储中的相关证书(若API要求客户端证书)。
- 检查命令行运行环境的系统SSL/TLS设置,确保已开启TLS 1.2或TLS 1.3版本(可通过Windows注册表或组策略验证)。
内容的提问来源于stack exchange,提问作者Falchini Cesar Adolfo
相关产品推荐
相关产品推荐

