ServiceFabric standalone: ​​не удалось получить файл закрытого ключа - PullRequest
0 голосов
/ 02 июля 2018

У меня есть автономный кластер ServiceFabric (3 узла). Я создал SSL сертификат для авторизации сервера и клиента. Затем я назначаю отпечаток сертификата для конфигурации кластера. Все работает хорошо (состояние кластера в порядке, и мои приложения работают также. Но в журнале Microsoft-ServiceFabric / Admin есть много ошибок. Следующее предупреждение и ошибки пишут в журнал каждую минуту:

  • Ошибка CryptAcquireCertificatePrivateKey. Ошибка: 0x80090014
  • Не удалось получить имя закрытого ключа для сертификата. Ошибка: 0x80090014
  • Все попытки получить закрытый ключ имя файла завершились неудачно.
  • Не удалось получить закрытый ключ сертификата. Отпечаток пальца: {Cert Отпечаток}. Ошибка: E_FAIL
  • Не удалось получить файл закрытого ключа. x509FindValue: {Cert Thumbprint}, x509StoreName: My, findType: FindByThumbprint, Ошибка E_FAIL
  • Ошибка SetCertificateAcls. Код ошибки: E_FAIL не может ACL
  • FabricNode / ServerAuthX509FindValue, ErrorCode E_FAIL

Я дал разрешение на запись в хранилище закрытых ключей для NETWORK SERVICE и SYSTEM. Также я назначил учетную запись gMSA для хранения на ПК. Но ошибки все еще появляются в журнале. С другой стороны, все выглядит хорошо, кластеризация и запуск ... Вот моя конфигурация кластера (часть безопасности):

"безопасность": {
"ServerCredentialType": "X509", "ClusterCredentialType": "Windows", "WindowsIdentities": {
"ClustergMSAIdentity": "gMSAccountName@domain.com", "ClusterSPN": "HTTP / servicefabric" }, "CertificateInformation": {
"ServerCertificate": { «Отпечаток пальца»: «{Cert Thumbprint}», "X509StoreName": "Мой" }, "ClientCertificateThumbprints": [
{
"CertificateThumbprint": "{Cert Thumbprint}", "IsAdmin": правда } ], "X509StoreName": "Мой" } },

Для создания сертификата x509 я использовал OpenSSL 1.0.2k-fips 26 января 2017 года. Я следую инструкциям из этой статьи: https://gist.github.com/harishanchu/e82d759c0235379d1778f799992b5774 Может ли кто-нибудь прояснить этот вопрос?

1 Ответ

0 голосов
/ 02 июля 2018

Похоже, у вас нет файла закрытого ключа в папке MachineKeys. Чтобы проверить, есть ли у вас физический файл в папке, выполните команду powershell:

$certThumb = "1D6523F622E33DF46382D081BCA9AE9A2D8D78CC"

Try
{
     $WorkingCert = Get-ChildItem CERT:\LocalMachine\My |where {$_.Thumbprint -match $certThumb} | sort $_.NotAfter -Descending | select -first 1 -erroraction STOP
     $TPrint = $WorkingCert.Thumbprint
     $rsaFile = $WorkingCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
}
Catch
{
     "Error: unable to locate certificate for $($CertCN)"
     Exit
}

if ($WorkingCert.PrivateKey) {
     $WorkingCert.PrivateKey
}
else
{
     "No private key found"  
}

Если вы получаете сообщение No private key found, это означает, что в папке MachineKeys нет закрытого ключа. Хотя свойства сертификата могут требовать иного (есть значок ключа и сообщение You have a private key that corresponds to this certificate). Хотя я не знаю почему, но для некоторых сертификатов вышеописанная ситуация случается.

В качестве обходного пути выполните следующие действия:

  1. Перейдите в локальное хранилище сертификатов и удалите сертификат.
  2. Сначала импортируйте свой сертификат в локальный пользовательский магазин .
  3. Затем импортируйте свой сертификат в локальное машинное хранилище.
  4. Установка прав доступа для Network Service пользователя.

Если вы выполните указанные выше шаги, личный ключ будет добавлен в папку MachineKeys, и ошибка исчезнет. Очевидно, вы должны повторить эти шаги для каждого узла кластера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...