gpt4 book ai didi

azure - 在 Azure Service Fabric 中加载 SSL 证书以用于自定义 TCP 服务

转载 作者:行者123 更新时间:2023-12-03 04:46:57 27 4
gpt4 key购买 nike

我创建了一个 TCP 服务,该服务创建了我尝试在 Azure Service Fabric 群集中托管的安全 SSL 连接。虽然有关于如何为站点和 API 加载和使用 SSL 证书的文档,但我似乎找不到任何关于如何为我的服务加载证书的文档。我已将证书加载到 key 保管库,但现在需要创建 X509Certificate2 的实例来保护我的 tcp 连接。

最佳答案

一种选择是以 SYSTEM 身份运行 Service Fabric 设置任务(只有 SYSTEM 有权更改证书上的 ACL)并提供 NETWORK SERVICE 读取您的证书的权限

下面是完整的示例,注意我在所有 LocalMachine/我的证书上设置了 ACL,修改 PS 脚本以仅获取您需要的证书

ServiceManifest.xml

  <CodePackage Name="Code" Version="1.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>setup.cmd</Program>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</SetupEntryPoint>
<EntryPoint>
<ExeHost>
<Program>XXX.exe</Program>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
</CodePackage>

setup.cmd

powershell.exe -NoLogo -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File configure-certs.ps1

configure-certs.ps1

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store @(
[System.Security.Cryptography.X509Certificates.StoreName]::My,
[System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)

try
{
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly)
$certs = $store.Certificates

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule @(
"NETWORK SERVICE",
[System.Security.AccessControl.FileSystemRights]::Read,
[System.Security.AccessControl.AccessControlType]::Allow)

foreach ($cert in $certs)
{
$privateKeyPath = "$($ENV:ProgramData)\Microsoft\Crypto\RSA\MachineKeys\$($cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName)"
$privateKeyInfo = New-Object System.IO.FileInfo @($privateKeyPath)

$privateKeyAccessControl = $privateKeyInfo.GetAccessControl()
$privateKeyAccessControl.AddAccessRule($rule)

$privateKeyInfo.SetAccessControl($privateKeyAccessControl)
}
}
finally
{
$store.Close()
}

ApplicationManifest.xml

ConfigOverrides 之后,作为要添加设置的包的 ServiceManifestImport 的子级

...
<Policies>
<RunAsPolicy CodePackageRef="Code" UserRef="LocalSystem" EntryPointType="Setup" />
</Policies>
...

DefaultServices 之后作为 ApplicationManifest 的子项

...
<Principals>
<Users>
<User Name="LocalSystem" AccountType="LocalSystem" />
</Users>
</Principals>
...

关于azure - 在 Azure Service Fabric 中加载 SSL 证书以用于自定义 TCP 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39188300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com