Microsoft windows terminalservices gateway operational

Перестали работать удаленные рабочие места. Следующая ошибка:

103    Критическое    Microsoft-Windows-TerminalServices-Gateway    Microsoft-Windows-TerminalServices-Gateway/Operational    15.03.2014 20:54:34
Службе шлюза удаленных рабочих столов не предоставлены разрешения, необходимые для доступа к SSL-сертификату, который требуется для приема подключений. Чтобы устранить эту проблему, свяжите (сопоставьте) действительный SSL-сертификат при помощи диспетчера шлюза удаленных рабочих столов. Дополнительные сведения см. в разделе справки диспетчера «Получение сертификата для сервера шлюза удаленных рабочих столов». Произошла следующая ошибка: «2148073494».

Вот еще какая-то общая ошибка:

В сети: счетчики производительности не запущены    15.03.2014 21:29:58    00183-90000-00001-AA422 (активировано)

единственное что приходит в ум — проблема появилась после смены коммутатора.


Posted by TDavidG 2017-12-29T20:07:17Z

Hey all I am trying to fix the following error in Server 2016:

Text

APP 103 Critical Microsoft-Windows-TerminalServices-Gateway Microsoft-Windows-TerminalServices-Gateway/Operational 12/29/2017 12:53:08 AM

Image: post content

I have already done the step by step located here and it seems to not have helped (I had «read«already selected for them all).

Image: post content

What else could be causing this?

2 Replies

  • Author John Peters

  • Do you have the right cert selected in the gateway manager?


    Was this post helpful?
    thumb_up
    thumb_down

Read these next…

  • Curated Which network diagram (SAN to LAN) would you say is correct?

    Which network diagram (SAN to LAN) would you say is correct?

    Networking

    Which is best practice and why? Is it done one way over the other to avoid potential issues or is it just good housekeeping . . . or both?Edit for context . . . To the left — 3-node Hyper-V failover cluster connected to shared dual-controller storage via …

  • Curated What kind of logs, data, or tooling do you have that need better visibility?

    What kind of logs, data, or tooling do you have that need better visibility?

    Windows

    Hey,
    I was part of a mass lay off awhile back, I am looking for work and
    solutions to keep me busy while I continue to apply for jobs. Before I
    was laid off I put together a small app that aggregated a lot of data
    from GitLab with a simple sea…

  • Curated Snap! -- Keyboard Hat, Emotional AI, US High-Speed Trains, Astronaut Wears Prada

    Snap! — Keyboard Hat, Emotional AI, US High-Speed Trains, Astronaut Wears Prada

    Spiceworks Originals

    Your daily dose of tech news, in brief.

    Welcome to the Snap!

    Flashback: October 6, 1942: Photocopying Patented (Read more HERE.)

    Bonus Flashback: October 6, 1992: US-Russia Human Spaceflight Agreement (Read more HERE.)

    You need to hear…

  • Curated Time Clocks

    Time Clocks

    Hardware

    We’re looking for a solution that would allow clients who participate in certain services to punch in and punch out on a time clock with a PIN versus fingerprint or prox card.  We’d prefer the solution to be entirely local versus cloud based.  We did look…

  • Curated Alternative to Sophos central

    Alternative to Sophos central

    Security

    Hi there, I am a Sophos partner and currently have clients that run Sophos Essentials on their work machines — and it looks like our licenses are due for expiry soon. Would you guys suggest any alternative vendors that offer the same functionality as Soph…


First published on TechNet on Apr 20, 2009



[Today’s post comes to us courtesy of


Chris Puckett


]

When you select the server and click Restart in the IIS Manager console, the Terminal Services Gateway service will be stopped and not restarted, even though the World Wide Web Publishing service is restarted. If you are logged into the server via RWW or a TS Gateway session, your connection will be dropped and you will not be able to get back in via RWW or TS Gateway. In addition, the following event will be logged in the Microsoft-Windows-TerminalServices-Gateway/Operational log.

Log Name: Microsoft-Windows-TerminalServices-Gateway/Operational

Source: Microsoft-Windows-TerminalServices-Gateway

Event ID: 400

Task Category: (3)

Level: Warning

Keywords: (16777216)

User: NETWORK SERVICE

Computer: SBS2008.CONTOSO.LOCAL

Description:

The TS Gateway service is shutting down. To diagnose possible causes for this problem, verify whether the following services are installed and started: (1) World Wide Web Publishing Service (2) Internet Authentication Service (IAS) (3) RPC/HTTP Load Balancing Service. Also, check Event Viewer for Network Policy Server (NPS) and IIS events that might indicate problems with NPS or IIS.

Keep this in my mind when working in IIS Manager on the SBS server remotely. Use

iisreset /noforce

instead or

restart

the

World Wide Web Publishing

service in the Services console.

Skip to content

Issue:

Unable to connect to RD Gateway , connecting to Desktop or RemoteApp in Remote Desktop Services Infrastructure

RDS2.PNG

Reviewing Event Viewer – Microsoft-Windows-TerminalServices-Gateway/Operational

Incoming connection requests, indicated by event ID’s 312, but the connection does not authenticate successfully

RDS3.PNG

Reviewing the LAN Manager Authentication Level you’ll see the “Send LM & NTLM – use NTLMv2 session Security if negotiated” will be set.

RDS1.PNG

This is not the default setting by may have been set on clients to improve/resolve legacy compatibility problems.

Resolution

Option 1:

Adjust the NTLM Manager setting on the client to be “Clients use only NTLMv2 authentication” – Any of these options will resolve the issue as client will be using NTLMv2 only which is required by default on RD Gateway

RDS4.PNG

Option 2:

If your unable to change the client NTLM settings as per option 1. Add the following registry keys on the RD Gateway Server

HKLM\Software\Microsoft\WindowsNT\CurrentVersion\TerminalServerGateway\Config\Core
Type: REG_DWORD
Name: EnforceChannelBinding 
VALUE: 0 (Decimal)

This only applies when a reboot has been completed on the Server.

This will force the RD Gateway to recieve and process NTLMv1 requests.


  • Remove From My Forums
  • Общие обсуждения

  • Перестали работать удаленные рабочие места. Следующая ошибка:

    103    Критическое    Microsoft-Windows-TerminalServices-Gateway    Microsoft-Windows-TerminalServices-Gateway/Operational    15.03.2014 20:54:34
    Службе шлюза удаленных рабочих столов не предоставлены разрешения, необходимые для доступа к SSL-сертификату, который требуется для приема подключений. Чтобы устранить эту проблему, свяжите (сопоставьте) действительный SSL-сертификат при помощи
    диспетчера шлюза удаленных рабочих столов. Дополнительные сведения см. в разделе справки диспетчера «Получение сертификата для сервера шлюза удаленных рабочих столов». Произошла следующая ошибка: «2148073494».

Проблема

При попытке создания цифровой подписи PDF в Adobe Acrobat 8 или 9 для Windows приложение возвращает сообщение об ошибке: «Не удалось закончить создание этой подписи. Исключение на уровне платформы». Вслед за сообщением об ошибке находится одно из этих выражений:

  • «Объект уже существует. Код ошибки: 2148073487»
  • «Keyset не существует. Код ошибки: 2148073494»
  • «Ключ недействителен для использования в указанном состоянии. Код ошибки: 2148073483″

Решение. Повторно создайте цифровое удостоверение и/или папку Crypto

Используйте одно или оба из предлагаемых решений:

Повторно создайте цифровое удостоверение

  1. Выберите пункт меню «Дополнительно» > «Настройки безопасности».

  2. В списке «Категории» в левой части окна «Настройки безопасности» выберите «Цифровое удостоверение».

  3. Выберите цифровое удостоверение, с помощью которого вы пытались подписать файл PDF.

  4. Нажмите кнопку «Удалить идентификатор».

  5. В диалоговом окне подтверждения нажмите «ОК».

  6. Нажмите кнопку «Добавить идентификатор».

  7. Следуйте инструкциям на экране для воссоздания цифрового удостоверения.

Повторно создайте папку Crypto

  1. Выполните одно из следующих действий в Проводнике Windows:

    • В системе Windows XP перейдите к папке C:Documents and Settings[имя-пользователя]Application DataMicrosoft.
    • В системе Windows Vista перейдите к папке C:Users[имя-пользователя]AppDataRoamingMicrosoft.

    Примечание. Эти пути включают скрытые папки. Чтобы сделать скрытые папки видимыми, см. раздел «Отображение скрытых файлов и папок в ОС Windows 10 и более ранних версиях».

  2. Переименовать папку Crypto в папку Crypto Old.

  3. Откройте Acrobat. Папка Crypto будет автоматически создана заново.

Hi,

In all probability the digital ID has expired. There is an expiration date listed in the Security Settings dialog, what does it say? If the digital ID has indeed expired, and you would like to remove it from the Windows Certificate Store you need to do it through a Windows interface, not through Acrobat. Like many things, there are more then one way to go about this, but the simplest is to start Internet Explorer. From Internet Explorer select the Tools menu or button, and then Internet Options from the drop-down menu. Next, select the Contents tab on the Internet Option dialog and then click the Certificates button.

Here is where you’ll see the digital IDs loaded into the Windows Certificate Store. You can highlight the expired ID that you would like to delete and click the Remove button, BUT FIRST, I strongly suggest that you Export the ID to a file in case you ever need to get back to it for some reason. Think of this as escrowing or archiving the digital ID just in case. Once you’ve saved the digital ID to a file, then you can remove it knowing that you could resurrect it at some time in the future.

Of course, if it has expired you will need to procure a fresh digital ID if you want to continue to digitally sign PDF files, but that’s a separate discussion.

Steve

Hi,

In all probability the digital ID has expired. There is an expiration date listed in the Security Settings dialog, what does it say? If the digital ID has indeed expired, and you would like to remove it from the Windows Certificate Store you need to do it through a Windows interface, not through Acrobat. Like many things, there are more then one way to go about this, but the simplest is to start Internet Explorer. From Internet Explorer select the Tools menu or button, and then Internet Options from the drop-down menu. Next, select the Contents tab on the Internet Option dialog and then click the Certificates button.

Here is where you’ll see the digital IDs loaded into the Windows Certificate Store. You can highlight the expired ID that you would like to delete and click the Remove button, BUT FIRST, I strongly suggest that you Export the ID to a file in case you ever need to get back to it for some reason. Think of this as escrowing or archiving the digital ID just in case. Once you’ve saved the digital ID to a file, then you can remove it knowing that you could resurrect it at some time in the future.

Of course, if it has expired you will need to procure a fresh digital ID if you want to continue to digitally sign PDF files, but that’s a separate discussion.

Steve

Это исключение возникало периодически, когда наша служба приложений Azure была перемещена в среду службы приложений. Мы используем Identity Server 4, и исключение происходит при подписании токена. Это можно увидеть в стеке вызовов ниже.

Сертификат подписи никогда не сохраняется в хранилище сертификатов, он загружается из базы данных в виде байтового массива:

new X509Certificate2(rawData, password,
                    X509KeyStorageFlags.MachineKeySet |
                    X509KeyStorageFlags.PersistKeySet);

Эти ссылки кажутся одной и той же проблемой:

.NET Core X509Certificate2.PrivateKey выбрасывает ошибку nte_bad_keyset

https://github.com/dotnet/corefx/issues/2583

< Сильный > Edit: Изначально мы думали, что это что-то особенное для Env службы приложений в Azure, но теперь мы видим исключение в стандартных службах приложений. В качестве теста мы создали веб-задание Azure, которое загружает сертификат из байтового массива и создает токены JWT (для подписи которых требуется закрытый ключ). Это повторяет ошибку. Также следует отметить, что веб-задание Azure даже не запускается, когда определенные флаги передаются в X509Certificate2 ctor (например, X509KeyStorageFlags.UserKeySet).

Трассировка стека каждый раз одинакова:

System.Security.Cryptography.CryptographicException:
   at Internal.NativeCrypto.CapiHelper.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.RSACryptoServiceProvider.get_SafeProvHandle()
   at System.Security.Cryptography.RSACryptoServiceProvider.get_SafeKeyHandle()
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 keySize, CspParameters parameters, Boolean useDefaultKeySize)
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameters)
   at Internal.Cryptography.Pal.CertificatePal.<>c.<GetRSAPrivateKey>b__59_0(CspParameters csp)
   at Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func`2 createCsp, Func`2 createCng)
   at Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey()
   at Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPrivateKey[T](X509Certificate2 certificate, Predicate`1 matchesConstraints)
   at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey()
   at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_HasPrivateKey()
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.HasPrivateKey(SecurityKey key)
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateJwtAsync(JwtSecurityToken jwt)
   at IdentityServer4.Services.DefaultTokenCreationService.<CreateTokenAsync>d__3.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Services.DefaultTokenService.<CreateSecurityTokenAsync>d__9.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<CreateAccessTokenAsync>d__10.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<ProcessTokenRequestAsync>d__8.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<ProcessAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Endpoints.TokenEndpoint.<ProcessTokenRequestAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Endpoints.TokenEndpoint.<ProcessAsync>d__5.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.FederatedSignOutMiddleware.<Invoke>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.AuthenticationMiddleware.<Invoke>d__2.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.BaseUrlMiddleware.<Invoke>d__2.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ApplicationInsights.AspNetCore.ExceptionTrackingMiddleware.<Invoke>d__4.MoveNext()

3 ответа

Лучший ответ

Чтобы решить эту проблему, мы переключились с сертификатов X509 (X509Certificate2) на сгенерированные RSA ключи (RSACryptoServiceProvider). Identity Server 4 поддерживает оба. Исключение больше не возникает.


1

J. Andrew Laughlin
7 Мар 2017 в 17:41

Эта ошибка означает, что где-то после того, как сертификат узнал, где хранится ключ, он был удален.

  • Может быть, что-то вызывает CngKey.Delete
  • Возможно, что-то клонирует это в RSACryptoServiceProvider и устанавливает PersistKeyInCsp в false.
  • Может быть, что-то просто очищает каталог ключей машины после свершившегося факта.
  • Другой (очень редкий) известный случай — это когда два потока загружают PFX параллельно (они не должны быть в одном и том же процессе), причем один из них не имеет PersistKeySet, заявленного во время импорта.

Если вы загружаете и удаляете сертификаты, вам не следует устанавливать PersistKeySet. Каждый раз, когда вы открываете PFX, на диске для каждого содержащегося в нем закрытого ключа создается другой файл … эти файлы очищаются нормально (до тех пор, пока процесс не завершается ненормально), но PersistKeySet предотвращает эту очистку.

Если ничто в анализе кода не выявит два очевидных местоположения удаления ключей (PersistKeyInCsp=false — хитрое), вам придется следовать рекомендациям по аудиту файловой системы в . NET Core X509Certificate2.PrivateKey выдает ошибку nte_bad_keyset .


0

Community
23 Май 2017 в 12:02

Возможно, вы не предоставили IIS доступ к своим закрытым ключам. У меня была такая же ошибка, но вместо ключей нужно было использовать сертификаты X509. Я только что дал разрешение на чтение закрытых ключей из сертификата для IIS_IUSRS на MMC. Это помогает мне.

Полный ответ от @thames: Как предоставить ASP.NET доступ к закрытому ключу в сертификате в хранилище сертификатов?

< Сильный > UPD :

Пошаговое руководство:

  1. Создать / купить сертификат с закрытым ключом
  2. Импортируйте сертификат в учетную запись «Локальный компьютер» (не «Текущий пользователь»). Установите флажок «Разрешить экспорт закрытого ключа» в мастере импорта.
  3. Откройте консоль MMC и добавьте оснастку «Сертификаты». Выберите «Учетная запись компьютера».
  4. Найдите свой сертификат и щелкните по нему правой кнопкой мыши. Выберите «Все задачи»> «Управление личными ключами»
  5. Добавьте доступ на чтение к своему ключу для пользователя IIS_IUSRS или IIS AppPool (зависит от версии и конфигурации IIS. Для отображения всех возможных параметров лучше использовать кнопку «Дополнительно»)
  6. Перезапустите ваше приложение


0

Eugene Voynov
26 Июл 2017 в 13:39

Мы начали видеть, что это исключение происходит с перерывами, когда наша служба приложений Azure перенесена в среду обслуживания приложений. Мы используем Identity Server 4, и исключение происходит во время подписания токена. Это можно увидеть в стеке вызовов ниже.

Сертификат подписи никогда не сохраняется в хранилище сертификатов, он загружается из базы данных в виде массива байтов:

new X509Certificate2(rawData, password,
                    X509KeyStorageFlags.MachineKeySet |
                    X509KeyStorageFlags.PersistKeySet);

Эти ссылки выглядят одинаково:

.NET Core X509Certificate2.PrivateKey вызывает ошибку nte_bad_keyset

https://github.com/dotnet/corefx/issues/2583

Edit: Первоначально мы думали, что это что-то особенное для App App Env в Azure, но теперь мы видим исключение в стандартных приложениях. В качестве теста мы создали веб-задачу Azure, которая загружает сертификат из массива байтов и создает токены JWT (для которых требуется закрытый ключ для подписи). Это повторяет ошибку. Также следует отметить, что работа Azure Web даже не запускается, когда определенные флаги передаются в X509Certificate2 ctor (например, X509KeyStorageFlags.UserKeySet).

Трассировка стека одинакова каждый раз:

System.Security.Cryptography.CryptographicException:
   at Internal.NativeCrypto.CapiHelper.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.RSACryptoServiceProvider.get_SafeProvHandle()
   at System.Security.Cryptography.RSACryptoServiceProvider.get_SafeKeyHandle()
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 keySize, CspParameters parameters, Boolean useDefaultKeySize)
   at System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameters)
   at Internal.Cryptography.Pal.CertificatePal.<>c.<GetRSAPrivateKey>b__59_0(CspParameters csp)
   at Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func'2 createCsp, Func'2 createCng)
   at Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey()
   at Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPrivateKey[T](X509Certificate2 certificate, Predicate'1 matchesConstraints)
   at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PrivateKey()
   at Microsoft.IdentityModel.Tokens.X509SecurityKey.get_HasPrivateKey()
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.HasPrivateKey(SecurityKey key)
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateJwtAsync(JwtSecurityToken jwt)
   at IdentityServer4.Services.DefaultTokenCreationService.<CreateTokenAsync>d__3.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Services.DefaultTokenService.<CreateSecurityTokenAsync>d__9.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<CreateAccessTokenAsync>d__10.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<ProcessTokenRequestAsync>d__8.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.ResponseHandling.TokenResponseGenerator.<ProcessAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Endpoints.TokenEndpoint.<ProcessTokenRequestAsync>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Endpoints.TokenEndpoint.<ProcessAsync>d__5.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.FederatedSignOutMiddleware.<Invoke>d__6.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.AuthenticationMiddleware.<Invoke>d__2.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at IdentityServer4.Hosting.BaseUrlMiddleware.<Invoke>d__2.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware'1.<Invoke>d__18.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.ApplicationInsights.AspNetCore.ExceptionTrackingMiddleware.<Invoke>d__4.MoveNext()

При разворачивании минимальной конфигурации RDS на скорую руку, в очередной раз сталкиваюсь с проблемами и в очередной раз забываю как их решать. Первое что нужно сделать перед развертыванием это конечно прочитать best practices, а потом составить план. Выписать все что необходимо заранее, подготовить, запросить. 

Например сертификат SSL и доменное имя типа remote.mycompany.ru (DNS запись A).  Даже развертывая очень маленький терминальный сервер для очень маленькой компании имеет смысл прикупить SSL если планируется доступ из сети интернет. Сегодня удаленный доступ нужен только с одного ноутбука, а завтра потребуется еще на десятке смартфонов. Замучаешься устанавливать везде свой локальный сертификат в корневые. Тем более что SSL сертификат сейчас стоит копейки. Я последнее время беру на https://www.ssls.com/ , с кодом 3.88DEAL  вообще копейки. И оплатить можно даже биткойнами. Проще всего запрос сертификата сделать установив на сервер роль IIS, тем более что он все равно потребуется для развертывания шлюза. В IIS есть раздел SSL, там визарды для создания запроса сертификата и для его установки (есть смысл запрашивать сертификат минимум 2048 bit ).

Часто сервер физически один, а службы удаленного доступа хотят иметь в своем составе шлюз, сервер лицензирования, сам терминальный сервер. Да и домен в ряде случаев не поднят. Технически возможна установка RDS на сервер в рабочей группе, но если есть возможность, можно сразу поднять контроллер домена. Если был куплен Windows Server Standard и выше, то его можно установить в двух экземплярах в виде виртуалок на одном физическом хосте. Если есть возможность — почему не использовать? Например DC аппаратный хост, а RDS на нем в Hyper-v. Или наоборот. Да DC в одном экземпляре, да еще и виртуальном, но ведь у нас нет 100500 ПК в этом домене. Всего один сервер и нужно просто иметь логины и пароли локальных админов.

В случае развертывания RDS в малом бизнесе очень часто IP адрес внешний один и нет возможности или желания докупать еще. В итоге создается конкуренция между внутренними сервисами за порты на этом IP. HTTP и HTTPS часто заняты другими ресурсами, и это создает массу проблем при развертывании RDS Gateway. Приходится переносить на другие порты, ручками местами прописывать потом эти порты.

Например, вместо 80 ставим 81, а вместо 443 — 442. Теряется красота ссылок на ресурсы, вместо https://remote.mycompany.ru/rdweb получаем https://remote.mycompany.ru:442/rdweb . Кроме того, наживаем кучу проблем с прописыванием этих самых 442 в разных местах. Есть пара решений, нашел на Windowsitpro.com. В оснастке диспетчера служб удаленных рабочих столов можно указать порты. Кроме того, для RemoteApp нужно тоже прописать порт, иначе приложения будут ссылаться на стандартный 443. Можно отредактировать реестр, указав порт:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionTerminal ServerCentralPublishedResourcesPublishedFarms<farm>DeploymentSettings, в нем ищем DeploymentRDPSettings и добавляем к gatewayhostname:s:remote.mycompany.ru:442 номер порта. Сделать это нужно до того как опубликовали приложения RemoteApp, в противном случае приложения придется распубликовать и опубликовать повторно. Можно не реестром, а через PowerShell:

Set-RDSessionCollectionConfiguration –CollectionName «Your Collection» -CustomRdpProperty «gatewayhostname:s:<GATEWAY.FQDN>:<442>» -ConnectionBroker <Your Connection Broker> 

Но у меня на эти часть команд PS ругался, считал что RDS не установлены на сервере.Часто возникает проблема с SSL и hostname. SSL мы получили вида remote.mycompany.ru, а сервер у нас что-то вроде rdsserver.mycompany.local . Поэтому при первых же подключениях можно получить как минимум предупреждение «Имя сервера отличается от имени указанного в сертификате». Это если мы конечно прописали сертификат везде где надо:

  • Привязки в IIS к порту 442 (можно и к 443)

  • В диспетчере серверов (Настройка развертывания служб удаленных рабочих столов)

  • В диспетчере шлюза удаленных рабочих столов ( у меня не прописался сам, пришлось ручками).

В некоторых случаях предупреждение можно просто игнорировать. На некоторых платформах игнорировать нельзя. 

Решить проблему можно либо командой:

Set-RDSessionCollectionConfiguration –CollectionName QuickSessionCollection -CustomRdpProperty “use redirection server name:i:1 `n alternate full address:s:remote.mycompany.ru”либо скриптом.
.Set-RDPublishedName.ps1 «remote.mycompany.ru:442»
Скрипт у меня сразу не запустился, нашел ряд решений, например —
powershell.exe -noprofile -executionpolicy bypass -file .Set-RDPublishedName.ps1

Я зачем-то еще настроил на DC DNS зону mycompany.ru, и в ней создал DNS запись A «remote.mycompany.ru», указывающую на внутренний адрес RDS сервера, но это скорее по привычке.

Все бы ничего, но как только мы решили проблему с несоответствием имени указанном в SSL сертификате и имени сервера к которому подключаемся, появляется другая проблема.

event 301:

Пользователь «mycompanyuser» на клиентском компьютере «8.8.8.8» не соответствует требованиям политики авторизации ресурсов и не авторизован для подключения к ресурсу «remote.mycompany.ru». Произошла следующая ошибка: «23002».

Дело в том что по умолчанию создаются политики удаленного доступа для штатной ситуации. А мы уже подправили скриптом, реестром, имя сервера к которому ведется подключение. И в политиках ничего не написано про remote.mycompany.ru. Открываем диспетчер шлюза удаленных рабочих столов и правим политику — добавляем туда наш адрес remote.mycompany.ru.

  • Microsoft windows server 2016 скачать iso
  • Microsoft windows usb dvd download tool скачать русскую версию
  • Microsoft windows не отвечает завершить процесс что делать
  • Microsoft windows server 2008 r2 hyper v server
  • Microsoft windows search filter host грузит процессор windows 10