.NET 5/.NET 6中是否存在与ICertRequest功能对等的接口?
.NET 5/6 替代ICertRequest提交CSR的可行方案
针对你的场景,不需要依赖BouncyCastle,也不用自己从零实现底层逻辑,有两个完全适配.NET 5/6的原生兼容方案:
方案1:使用微软官方CsWin32工具生成ICertRequest互操作封装
该方案和你原有.NET Framework的调用逻辑完全兼容,无需改动业务代码:
- 首先给项目安装
Microsoft.Windows.CsWin32NuGet包,这是微软官方推出的Windows API互操作代码生成工具,无额外第三方依赖 - 在项目根目录新建
NativeMethods.txt文件,写入内容ICertRequest,编译时工具会自动生成该接口以及所有依赖类型的纯托管互操作封装 - 直接调用生成的
ICertRequest.Submit方法即可,参数规则、返回值和你之前使用的Win32 COM接口完全一致,已经自动处理了内存封送、类型转换的所有细节 - 注意:该方案仅支持Windows运行环境,和你原有Win32 API的运行要求一致,完全适配本地部署CA的使用场景
方案2:通过CA Web注册接口实现全托管提交
如果你的本地CA(如ADCS)开启了Web注册服务,可以完全抛弃COM调用,只用.NET原生类库实现:
- 用
System.Security.Cryptography.X509Certificates命名空间下原生的CertificateRequest类生成标准PKCS#10格式的CSR,该类从.NET Core 3.0开始就已经内置支持 - 将生成的CSR转为Base64编码格式,按照CA Web接口要求封装POST请求提交
- 接口返回的证书内容可以直接用原生
X509Certificate2类加载使用,全程没有任何非托管调用
补充说明
- 不建议手动编写ICertRequest的COM互操作代码,CsWin32生成的封装已经处理了所有边界情况,稳定性远高于自定义实现
- 两个方案后续迁移到.NET 6/7/8都不需要做代码调整,兼容性有保障
内容的提问来源于stack exchange,提问作者Dbloom
相关产品推荐
相关产品推荐

