Azure service fabric Azure服务结构、KeyVault、SSL证书

Azure service fabric Azure服务结构、KeyVault、SSL证书,azure-service-fabric,azure-keyvault,Azure Service Fabric,Azure Keyvault,我希望使用已部署到集群的证书(即,它存在于Cert:\LocalMachine\my中)来保护我自己的HTTPS端点(node.js express.js server) 我当然想避免获得源代码管理证书。我不能在ServiceManifest中使用EndpointBindingPolicy,因为据我所知,它只适用于基于http.sys(?)的系统,而这不是 我的想法可能是运行SetupEntryPoint脚本: 从商店获取证书 将其导出为带有随机密码短语(或某种适当格式)的pfx 将其复制到{p

我希望使用已部署到集群的证书(即,它存在于Cert:\LocalMachine\my中)来保护我自己的HTTPS端点(node.js express.js server)

我当然想避免获得源代码管理证书。我不能在ServiceManifest中使用
EndpointBindingPolicy
,因为据我所知,它只适用于基于http.sys(?)的系统,而这不是

我的想法可能是运行
SetupEntryPoint
脚本:

  • 从商店获取证书
  • 将其导出为带有随机密码短语(或某种适当格式)的pfx
  • 将其复制到{pkgroot}/certs/ssl_cert.pfx
  • 用随机密码短语替换serverinit.js中的某种令牌
  • 这样,服务器,呃,代码库不需要有证书,我只需要相信当服务运行时它会在那里

    然而,我不认为我能做到这一点,如果这是一个明智的想法,因为存储中的证书被标记为私钥不可导出!或者,至少,他们与我的RDP帐户

    是否有方法导出带有私钥的证书

    我的选择是什么


    最后我编写了一个powershell脚本,它在我的发布管道中运行,参数是clientID、clientSecret和certificateName。clientSecret存储为我的代理的受保护环境变量

  • 在与KeyVault相同的订阅下创建新的应用程序注册(应与SF Cluster相同)(例如,在portal.azure.com中)
  • 记下应用程序ID
  • 创建应用程序机密
  • 使用应用程序作为主体修改KeyVault ACL,设置“仅获取机密”
  • 使用带有客户端ID和密码的RESTAPI

  • 例如,我选择了在SetupEntryPoint中获取证书,因为这样可以更好地对开放世界隐藏客户端机密(例如,不应该/不需要访问它的开发人员)

    是否有一种方法可以从存储中读取证书而无需导出它?像这样:不确定,我尝试使用powershell脚本w/crypt32.dll来强制windows提取包含私钥的证书,但即使作为LocalSystem帐户运行,也无法在服务器上工作(它提取了证书,但不包含私钥,但在我的桌面上工作正常),因此我猜这也不会。不过我会尝试一下,但是edge.js是一个相当庞大的库,每次我们部署新版本时都会用到它!另一种方法是将其作为http运行,并将其置于支持SSL卸载的反向代理之后。反向代理是一个好主意,但基本上只有我管理这个集群,所以我希望尽可能使事情相对简单!我最终编写了一个在发布管道中执行的powershell脚本,该脚本从keyvault中获取证书。3kB当然比几个100MB强!难道没有一种方法可以在不导出证书的情况下从存储中读取证书吗?像这样:不确定,我尝试使用powershell脚本w/crypt32.dll来强制windows提取包含私钥的证书,但即使作为LocalSystem帐户运行,也无法在服务器上工作(它提取了证书,但不包含私钥,但在我的桌面上工作正常),因此我猜这也不会。不过我会尝试一下,但是edge.js是一个相当庞大的库,每次我们部署新版本时都会用到它!另一种方法是将其作为http运行,并将其置于支持SSL卸载的反向代理之后。反向代理是一个好主意,但基本上只有我管理这个集群,所以我希望尽可能使事情相对简单!我最终编写了一个在发布管道中执行的powershell脚本,该脚本从keyvault中获取证书。3kB当然比几个100MB强!