我可以在我的自托管 WCF 应用程序中使用 Let's Encrypt 证书吗?
Posted
技术标签:
【中文标题】我可以在我的自托管 WCF 应用程序中使用 Let\'s Encrypt 证书吗?【英文标题】:Can I use a Let's Encrypt certificate with my self-hosted WCF application?我可以在我的自托管 WCF 应用程序中使用 Let's Encrypt 证书吗? 【发布时间】:2017-09-04 22:29:21 【问题描述】:我找到了一些关于如何生成自签名 CA 和服务证书的指南。
示例: https://www.codeproject.com/Articles/24027/SSL-with-Self-hosted-WCF-Service
我对证书一无所知,所以我的问题是,Let's Encrypt 证书是否与自托管 WCF 服务兼容?
如果商业 CA 提供 Let's Encrypt 没有的格式,我可以购买证书。
谢谢。
【问题讨论】:
【参考方案1】:可以使用 Let's Encrypt 证书使 WCF 服务通过 https 进行通信。您可以使用letsencrypt.org 网站上列出的 Windows 客户端之一进行设置。 如果您决定使用ACMESharp client,您会注意到一个基本功能尚未完全实现:certificate renewal。 然而,这个问题可以通过使用 Marc Durdin 提供的脚本来解决,他提交了on his blog。 设置 ACMESharp 客户端并在脚本中定义变量后,您必须创建一个计划任务,该任务每 60 天运行一次并执行脚本。
要使 WCF 服务使用 https 绑定,您必须在服务配置中定义该绑定。
创建一个security
元素。然后,在endpoint
element 的bindingConfiguration
属性中引用父binding
元素的name
属性。在同一 endpoint
元素的 address
属性中,您必须指定您的服务可用的 https 地址。
如果您使用的端口不是 443,则必须像这样显式定义它:https://hostname.tld:port/ServiceName/
。
完成所有这些设置后,您必须将letsencrypt 提供的证书绑定到该绑定。您可以使用netsh http add sslcert
命令执行此操作。我编写了以下脚本,您可以使用它来自动执行此过程以及上述证书的续订:
$domain = 'hostname.tld' # insert your hostname
$ipport = '0.0.0.0:portnumber' # insert the proper binding
$getThumb = Get-ChildItem -path cert:\LocalMachine\My | where $_.Subject -match $domain
$certHash = $getThumb.Thumbprint
$activeBinding = netsh http show sslcert ipport=$ipport
$activeBindingHash = $activeBinding[5]
$guid = '' + [guid]::NewGuid() + ''
If( -Not $activeBindingHash )
netsh http add sslcert ipport=$ipport certhash=$certHash appid=$guid
return
$hashesMatch = $activeBindingHash | Select-String -Pattern $certHash -Quiet
If( -Not $hashesMatch )
netsh http delete sslcert ipport=$ipport
netsh http add sslcert ipport=$ipport certhash=$certHash appid=$guid
如果您在脚本中定义变量并将其也作为计划任务运行,您的 wcf 服务将使用来自 Let's Encrypt 的 ssl 证书,该证书将自动更新和反弹。
【讨论】:
以上是关于我可以在我的自托管 WCF 应用程序中使用 Let's Encrypt 证书吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的自托管 WCF 服务不尝试保留 localhost 以外的 url?