3

Использование Azure SDK 2.3 на моей виртуальной машине vs2013 Я могу потреблять очереди служебной шины размещен на Azure безболезненно. Однако, в Windows Server 2008 R2 Standard SP1, похоже, что Windows не может доверять задействованным сертификатам и генерируется исключение.Azure Hosted Service Bus: «Сертификат X.509 CN = servicebus.windows.net не находится в магазине доверенных людей».

Линия, которая бросает:

// Send the message 
await queueclient.SendAsync(message); 

Exception сообщение:

Сертификат X.509 CN = servicebus.windows.net не в доверенном людей магазине. Сертификат X.509 CN = servicebus.windows.net цепочка здание не удалось. В используемом сертификате есть цепочка доверия, которая не может быть проверена . Замените сертификат или измените сертификат ValidationMode. Цепочка сертификатов не может быть создана для доверенного корневого центра .

Журналы CAPI2 (прилагаются ниже) указывают на проблему доверия, поэтому я сравнивал сертификаты, установленные на обеих машинах. Следующие сертификаты отсутствуют на сервере:

Промежуточные центры сертификации>Microsoft Internet Authority (Выдано Балтимор CyberTrust Root)

Промежуточные центры сертификации>MSIT машина Auth CA 2 (эмитированных от Microsoft Internet Authority)

Вопросы:

  1. Откуда берутся сертификаты?
  2. Почему они отсутствуют на сервере?
  3. Как исправить эту проблему?

Возможные маршруты (обновлено):

  1. Установка Azure SDK 2.3 для Visual Studio 2013 на сервере
  2. Установите все обновления Windows на сервере

Я пробовал:

<appSettings> 
    <add key="Microsoft.ServiceBus.X509RevocationMode" value="NoCheck"/> 
</appSettings> 

CAPI2 Проверьте событие цепи политики:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-Windows-CAPI2" Guid="{5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}" /> 
    <EventID>30</EventID> 
    <Version>0</Version> 
    <Level>2</Level> 
    <Task>30</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x4000000000000001</Keywords> 
    <TimeCreated SystemTime="2014-06-11T19:57:38.998656000Z" /> 
    <EventRecordID>5642</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="5280" ThreadID="8472" /> 
    <Channel>Microsoft-Windows-CAPI2/Operational</Channel> 
    <Computer>ne-r026-310cn</Computer> 
    <Security UserID="S-1-5-82-1758914132-2364927631-3137608320-3227192193-3717738432" /> 
    </System> 
    <UserData> 
    <CertVerifyCertificateChainPolicy> 
     <Policy type="CERT_CHAIN_POLICY_BASE" constant="1" /> 
     <Certificate fileRef="3E560462C61B45BE1A59F1286B34A065A878AFA0.cer" subjectName="servicebus.windows.net" /> 
     <CertificateChain chainRef="{19B5F58A-FA37-4213-A888-C81C340D019C}" /> 
     <Flags value="1000" CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG="true" /> 
     <Status chainIndex="0" elementIndex="-1" /> 
     <EventAuxInfo ProcessName="w3wp.exe" /> 
     <CorrelationAuxInfo TaskId="{F8DE43DD-9E68-461E-8A2B-17215BA87E0C}" SeqNumber="1" /> 
     <Result value="800B010A">A certificate chain could not be built to a trusted root authority.</Result> 
    </CertVerifyCertificateChainPolicy> 
    </UserData> 
</Event> 

CAPI2 Build Ch айн событие:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-Windows-CAPI2" Guid="{5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}" /> 
    <EventID>11</EventID> 
    <Version>0</Version> 
    <Level>2</Level> 
    <Task>11</Task> 
    <Opcode>2</Opcode> 
    <Keywords>0x4000000000000003</Keywords> 
    <TimeCreated SystemTime="2014-06-11T19:57:38.998656000Z" /> 
    <EventRecordID>5641</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="5280" ThreadID="8472" /> 
    <Channel>Microsoft-Windows-CAPI2/Operational</Channel> 
    <Computer>ne-r026-310cn</Computer> 
    <Security UserID="S-1-5-82-1758914132-2364927631-3137608320-3227192193-3717738432" /> 
    </System> 
    <UserData> 
    <CertGetCertificateChain> 
     <Certificate fileRef="3E560462C61B45BE1A59F1286B34A065A878AFA0.cer" subjectName="servicebus.windows.net" /> 
     <ValidationTime>2014-06-11T19:57:38.998Z</ValidationTime> 
     <AdditionalStore /> 
     <ExtendedKeyUsage /> 
     <Flags value="0" /> 
     <ChainEngineInfo context="machine" /> 
     <AdditionalInfo> 
     <NetworkConnectivityStatus value="1" _SENSAPI_NETWORK_ALIVE_LAN="true" /> 
     </AdditionalInfo> 
     <CertificateChain chainRef="{19B5F58A-FA37-4213-A888-C81C340D019C}"> 
     <TrustStatus> 
      <ErrorStatus value="10000" CERT_TRUST_IS_PARTIAL_CHAIN="true" /> 
      <InfoStatus value="0" /> 
     </TrustStatus> 
     <ChainElement> 
      <Certificate fileRef="3E560462C61B45BE1A59F1286B34A065A878AFA0.cer" subjectName="servicebus.windows.net" /> 
      <SignatureAlgorithm oid="1.2.840.113549.1.1.5" hashName="SHA1" publicKeyName="RSA" /> 
      <PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="2048" /> 
      <TrustStatus> 
      <ErrorStatus value="0" /> 
      <InfoStatus value="2" CERT_TRUST_HAS_KEY_MATCH_ISSUER="true" /> 
      </TrustStatus> 
      <ApplicationUsage> 
      <Usage oid="1.3.6.1.5.5.7.3.2" name="Client Authentication" /> 
      <Usage oid="1.3.6.1.5.5.7.3.1" name="Server Authentication" /> 
      </ApplicationUsage> 
      <IssuanceUsage /> 
     </ChainElement> 
     </CertificateChain> 
     <EventAuxInfo ProcessName="w3wp.exe" /> 
     <CorrelationAuxInfo TaskId="{9077AB4E-95E3-449B-AF2F-0BF42E92E6B7}" SeqNumber="11" /> 
     <Result value="800B010A">A certificate chain could not be built to a trusted root authority.</Result> 
    </CertGetCertificateChain> 
    </UserData> 
</Event> 

CAPI2 X509 Объекты событий:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Microsoft-Windows-CAPI2" Guid="{5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}" /> 
    <EventID>90</EventID> 
    <Version>0</Version> 
    <Level>4</Level> 
    <Task>90</Task> 
    <Opcode>0</Opcode> 
    <Keywords>0x4000000000000200</Keywords> 
    <TimeCreated SystemTime="2014-06-11T19:57:38.998656000Z" /> 
    <EventRecordID>5640</EventRecordID> 
    <Correlation /> 
    <Execution ProcessID="5280" ThreadID="8472" /> 
    <Channel>Microsoft-Windows-CAPI2/Operational</Channel> 
    <Computer>ne-r026-310cn</Computer> 
    <Security UserID="S-1-5-82-1758914132-2364927631-3137608320-3227192193-3717738432" /> 
    </System> 
    <UserData> 
    <X509Objects> 
     <Certificate fileRef="3E560462C61B45BE1A59F1286B34A065A878AFA0.cer" subjectName="servicebus.windows.net"> 
     <Subject> 
      <CN>servicebus.windows.net</CN> 
     </Subject> 
     <SubjectKeyID computed="false" hash="BD41618C22D8DBEE9D172C12A2C549D61711ED75" /> 
     <SignatureAlgorithm oid="1.2.840.113549.1.1.5" hashName="SHA1" publicKeyName="RSA" /> 
     <PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="2048" /> 
     <Issuer> 
      <CN>MSIT Machine Auth CA 2</CN> 
      <DC>redmond</DC> 
      <DC>corp</DC> 
      <DC>microsoft</DC> 
      <DC>com</DC> 
     </Issuer> 
     <SerialNumber>70DB015B000100008C58</SerialNumber> 
     <NotBefore>2013-07-27T03:31:06Z</NotBefore> 
     <NotAfter>2015-07-27T03:31:06Z</NotAfter> 
     <Extensions> 
      <KeyUsage value="B0" CERT_DIGITAL_SIGNATURE_KEY_USAGE="true" CERT_KEY_ENCIPHERMENT_KEY_USAGE="true" CERT_DATA_ENCIPHERMENT_KEY_USAGE="true" /> 
      <ExtendedKeyUsage> 
      <Usage oid="1.3.6.1.5.5.7.3.2" name="Client Authentication" /> 
      <Usage oid="1.3.6.1.5.5.7.3.1" name="Server Authentication" /> 
      </ExtendedKeyUsage> 
      <SubjectAltName> 
      <DNSName>*.servicebus.windows.net</DNSName> 
      <DNSName>servicebus.windows.net</DNSName> 
      </SubjectAltName> 
      <AuthorityKeyIdentifier> 
      <KeyID hash="EBDB115EF8099ED8D6629CFD629DE3844A28E127" /> 
      </AuthorityKeyIdentifier> 
     </Extensions> 
     </Certificate> 
     <EventAuxInfo ProcessName="w3wp.exe" /> 
     <CorrelationAuxInfo TaskId="{9077AB4E-95E3-449B-AF2F-0BF42E92E6B7}" SeqNumber="10" /> 
    </X509Objects> 
    </UserData> 
</Event> 
+0

Проблема Я также получаю эту ошибку очень редко. Но проблема в том, что я не использую консольное приложение. Это веб-приложение, как сервисное, так и веб-приложение, в одной и той же группе ресурсов. –

ответ

6

Отсутствующие сертификаты были ответственны за исключением.

Я не смог найти сертификаты онлайн, и я до сих пор не уверены в том, как именно им удалось установить себя но я думаю, что у меня есть идея ..

Как нам удалось получить сертификаты ? Мы изолировали код сообщения Service Bus в консольном приложении и выполнили его с правами администратора на рабочем сервере. Сертификаты автоматически устанавливались в процессе.

Возможно, наш пул приложений под управлением ApplicationPoolIdentity с ограниченными разрешениями не позволяет Windows загружать или устанавливать сертификаты.

Эта ссылка, кажется, предлагает соответствующую информацию: http://netsekure.org/2011/04/automatic-ca-root-certificate-updates-on-windows/

Update: Вы можете загрузить цепочку сертификатов here.

+1

Спасибо. В нашем случае идентификатор пула приложений в рамках (ApplicationPoolIdentity) не имел достаточных уровней доступа. Присвоение ему удостоверения с повышенными разрешениями исправило его. – Crwydryn

+1

@Crwydryn приятно! Это действительно проблема разрешения. Не забудьте вернуться к ApplicationPoolIdentity, вам не нужны повышенные разрешения, за исключением загрузки сертификатов один раз. – maxbeaudoin

0

Для устранения проблемы доверия сертификатов от Service Bus для Windows Server, используйте следующую команду:

Создание списка сертификатов вы доверяете:

var trustedCertificates = new HashSet<string>(new[] 
    { 
     "1245…", 
     "4567…, 
     "8102…" 
    }, StringComparer.OrdinalIgnoreCase); 

доверяйте тем:

ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => 
    { 
     if (errors == SslPolicyErrors.None) 
     { 
      return true; 
     } 

     var hashString = certificate.GetCertHashString(); 
     var isTrusted = trustedCertificates.Contains(hashString); 

     if (!isTrusted) 
     { 
      telemetryClient.TrackTrace($"Untrusted: {hashString} Errors: {errors} Cert: {certificate.ToString()}", SeverityLevel.Warning); 
     } 

     return isTrusted; 
    }; 

Успокойная служебная шина:

private static void SetCertificateValidator() 
    { 
     var retriableCertificateValidatorType = Type.GetType("Microsoft.ServiceBus.Channels.Security.RetriableCertificateValidator, Microsoft.ServiceBus", true, false); 
     var instanceProperty = retriableCertificateValidatorType.GetProperty("Instance", BindingFlags.Static | BindingFlags.NonPublic); 
     var instance = instanceProperty.GetValue(null); 

     var peerOrChainTrustNoCheck = retriableCertificateValidatorType.GetField("peerOrChainTrustNoCheck", BindingFlags.Instance | BindingFlags.NonPublic); 
     peerOrChainTrustNoCheck?.SetValue(instance, new EmptyOpX509CertificateValidator()); 
    } 

    private sealed class EmptyOpX509CertificateValidator : X509CertificateValidator 
    { 
     public override void Validate(X509Certificate2 certificate) 
     { 
     } 
    }