如何为Windows VPS上的.NET Core Web API配置免费SSL证书
配置.NET Core Web API通过HTTPS访问(仅公网IP场景)
刚好碰到过一模一样的需求,给你整理了一套实操方案,完全适配你只有公网IP、用自包含.NET Core应用的情况:
1. 先拿到支持公网IP的免费SSL证书
大多数免费SSL服务商不支持给纯IP发证书,但ZeroSSL是支持的,这是最优解:
- 登录ZeroSSL后台创建新证书,类型选「IP Address Certificate」
- 填入你的VPS公网IP(xxx.xxx.xxx.xxx),然后选验证方式——推荐HTTP验证最简单:
- ZeroSSL会生成一个验证文件,你把这个文件放到.NET Core应用的
wwwroot目录里,确保通过http://xxx.xxx.xxx.xxx/.well-known/pki-validation/[文件名]能直接访问到内容 - 验证通过后,下载证书包,里面会有三个文件:证书文件(.crt)、私钥(.key)、CA bundle(.ca-bundle)
- ZeroSSL会生成一个验证文件,你把这个文件放到.NET Core应用的
2. 把证书转成Windows适配的PFX格式
ZeroSSL给的私钥是PEM格式,.NET Core在Windows下用PFX(PKCS#12)格式更顺手,用OpenSSL转一下:
- 如果VPS没装OpenSSL,先装一个(直接搜Windows版OpenSSL下载就行)
- 打开命令提示符,切换到证书文件所在目录,执行:
执行时会让你设一个密码,一定要记好,后面配置要用openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile ca-bundle.crt
3. 给你的.NET Core应用配置HTTPS
有两种方式,选你顺手的来:
方式一:改配置文件(一劳永逸)
打开应用发布目录里的appsettings.json,添加Kestrel的HTTPS端点配置:
"Kestrel": { "Endpoints": { "Https": { "Url": "https://xxx.xxx.xxx.xxx:443", "Certificate": { "Path": "certificate.pfx", "Password": "你刚才设的PFX密码" } } } }
把转换好的certificate.pfx放到和.exe同目录下就行。
方式二:启动时用命令行参数
不想改配置文件的话,直接在启动.exe时指定:
YourAppName.exe --urls "https://xxx.xxx.xxx.xxx:443" --certificate-path "certificate.pfx" --certificate-password "你的PFX密码"
4. 别忘开Windows防火墙的443端口
这步很容易忘!如果防火墙没放行,外面根本访问不了:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」→「新建规则」
- 选「端口」,下一步输入443,协议选TCP,允许连接,应用到所有网络类型,最后给规则起个名字比如「HTTPS API访问」
5. 验证效果
启动你的.NET Core应用,然后在浏览器里访问https://xxx.xxx.xxx.xxx:443/api/values,正常情况下浏览器地址栏会显示安全锁,不会再弹不安全的提示了。
额外提醒
- 如果你的VPS之前装了IIS,要确保IIS没占用443端口(可以停掉IIS或者改它的端口),不然你的应用启动会失败
- 免费IP证书有效期一般是90天,到期前记得去ZeroSSL重新申请更新
- 如果ZeroSSL的IP证书申请有问题,也可以试试SSL.com的免费IP证书,流程差不多
内容的提问来源于stack exchange,提问作者Sri




