работа_с_сертификатами_exchange

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
работа_с_сертификатами_exchange [2024/04/02 13:17] jpработа_с_сертификатами_exchange [2025/03/17 13:47] (current) jp
Line 3: Line 3:
 **Установка сертификатов для IMAP** **Установка сертификатов для IMAP**
  
-:!: //В случае, если мы используем wildcard-сертификат, напрямую назначать его службе IMAP не требуется.// +:!: //В случае, если мы используем wildcard-сертификат, дополнительно назначать его отдельно - не требуется.// 
  
 Необходимо только указать хостнейм для подключения, сервер сам найдёт wildcard-сертификат.  Необходимо только указать хостнейм для подключения, сервер сам найдёт wildcard-сертификат. 
Line 15: Line 15:
 Get-ExchangeCertificate | select Thumbprint, Services, NotAfter, Subject, CertificateDomains | where {$_.Services -match "IMAP"} | fl Get-ExchangeCertificate | select Thumbprint, Services, NotAfter, Subject, CertificateDomains | where {$_.Services -match "IMAP"} | fl
 </code> </code>
 +
 +Если нам всё-таки необходимо назначить сертификат IMAP напрямую, сделать это можно следующим образом:
 +
 +   Enable-ExchangeCertificate -Thumbprint 9043B6B42D0BB935E4CB84F81111506012322A51 -Services 'imap'
 +
 +----
 +=== Назначение сертификата службам SMTP ===
 +
 +   Enable-ExchangeCertificate -Thumbprint 9043B6B42D0BB935E4CB84F81111506012322A51 -Services 'smtp'
  
 ---- ----
Line 60: Line 69:
 Если мы попробуем удалить старый сертификат после назначения нового через веб - мы получим сообщение, что сертификат нельзя удалять, т.к. он уже назначен коннектору отправки.  Если мы попробуем удалить старый сертификат после назначения нового через веб - мы получим сообщение, что сертификат нельзя удалять, т.к. он уже назначен коннектору отправки. 
  
 +;#;
 {{::certificate-removal-error.png?600|}} {{::certificate-removal-error.png?600|}}
 +;#;
  
-Это намекает нам на то, что сертификат необходимо поменять на коннекторе отправки тоже. Здесь есть нюанс, связанный с тем, что при простом выполнении команды //Get-SendConnector | fl//, мы не сможем получить thumbprint сертификата, а получим только имя. Если имена сертификатов совпадают, что часто бывает, когда продляем сертификат от одного и того же УЦ - потребуется сгенерировать имя нового сертификата специальным образом, как описано далее в этом разделе. +Это намекает нам на то, что сертификат необходимо поменять на коннекторе отправки тоже. Здесь есть нюанс, связанный с тем, что при простом выполнении команды //Get-SendConnector | fl//, мы не сможем получить thumbprint сертификата, а получим только имя. Если имена сертификатов совпадают, что часто бывает, когда продляем сертификат от одного и того же УЦ - потребуется сгенерировать имя нового сертификата специальным образом, как описано далее в этом разделе и установить его на коннектор
  
 :!: //В случае, если коннектор отправки реализован через сервера Edge - описанные действия выполняем на серверах Edge Transport, куда устаналиваем через mmc новый сертификат.//   :!: //В случае, если коннектор отправки реализован через сервера Edge - описанные действия выполняем на серверах Edge Transport, куда устаналиваем через mmc новый сертификат.//  
Line 106: Line 117:
 Запускаем транспортную службу на всех серверах, где останавливали: Запускаем транспортную службу на всех серверах, где останавливали:
  
-   Start-Service MSExchangeTransport +   Start-Service MSExchangeTransport   
-   +
 :!: //Если после этого мы хотим удалить старый сертификат, но всё равно получаем в веб-интерфейсе прежнюю ошибку - удаляем сертификат со всех серверов, на которых он установлен при помощи mmc.// :!: //Если после этого мы хотим удалить старый сертификат, но всё равно получаем в веб-интерфейсе прежнюю ошибку - удаляем сертификат со всех серверов, на которых он установлен при помощи mmc.//
 +
 +**Назначение нового сертификата для SMTP edge-транспорта**
 +
 +Назначения сертификата send-коннектору недостаточно. После этого обязательно назначить сертификат службам SMTP на Edge Transport серверах. Если этого не сделать, рискуем получить задержки при доставке писем, а также неработающее шифрование почты. В логах edge, расположенных в папке:
 +
 +<WRAP prewrap>
 +<code>
 +C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\Edge\ProtocolLog\SmtpSend
 +</code>
 +</WRAP> 
 +
 +Обнаружим ошибку:
 +
 +   TLS negotiation failed with error UnknownCredentials
 +
 +Если мы запустим на эджах команду //Get-ExchangeCertificate//, мы увидим, что новый сертификат (thumbprint которого будет и в логе) - не назначен сервису SMTP. Отметим thumbprint сертификата и назначим его ОДНИМ ИЗ сертификатов SMTP:
 +
 +   Enable-ExchangeCertificate CERT_THUMBPRINT -Services SMTP
 +
 +:!: //Если мы используем один с серверами mailbox - wildcard сертификат - мы не хотим назначать его сертификатом по умолчанию, т.к. такие сертификаты на edge использовать нельзя и к тому же, сломает edge subscription. Поэтому, при выполнении командлета Enable-ExchangeCertificate - на запрос о замене сертификата следует ответить "n". В этом случае сервису SMTP будет назначено несколько сертификатов, это позволит работать TLS на Send-коннекторе и оновременно не сломает работу edge subscription.// 
 +
 +{{::not_replace_smtp_exch_edge.jpg|}}
 +
 +Два сертификата на SMTP:
 +
 +{{::exchange_smtp_two_certs.jpg|}}
 +
 +----
 +
 +=== Скрипт для определения используемого сертификата на SMTP-коннекторах на нескольких серверах ===
 +
 +<WRAP prewrap>
 +<code>
 +#Get all Exchange Servers in the environment
 +
 +$ExchangeServers = (Get-ExchangeServer |Where-Object {$_.ServerRole -like "mailbox"} )| Select-Object Name,DistinguishedName
 +
 +$Results = @()
 +
 +#Process Information
 +
 +ForEach($Server in $ExchangeServers){
 +
 +$TransportCert = (Get-ADObject -Identity $Server.DistinguishedName -Properties *).msExchServerInternalTLSCert
 +
 +$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
 +
 +$CertBlob = [System.Convert]::ToBase64String($TransportCert)
 +
 +$Cert.Import([Convert]::FromBase64String($CertBlob))
 +
 +$server | Add-Member -MemberType NoteProperty -Name DefaultTLSCertSubject -Value $Cert.Subject
 +
 +$server | Add-Member -MemberType NoteProperty -Name DefaultTLSCertFriendlyName -Value $Cert.FriendlyName
 +
 +$server | Add-Member -MemberType NoteProperty -Name DefaultTLSCertThumbprint -Value $Cert.Thumbprint
 +
 +$server | Add-Member -MemberType NoteProperty -Name DefaultTLSCertExpireDate -Value $Cert.NotAfter
 +
 +                             
 +
 +$Results += $Server
 +
 +}
 +
 +#Show result
 +$Results | Out-GridView
 +</code>
 +</WRAP>
 +
 +Автор: https://dirteam.com/bas/2020/06/24/field-notes-what-is-the-current-default-smtp-certificate-for-your-exchange-server-environment/
 {{tag>Exchange Microsoft Mail PowerShell Certificates}} {{tag>Exchange Microsoft Mail PowerShell Certificates}}
работа_с_сертификатами_exchange.1712063875.txt.gz · Last modified: 2024/04/02 13:17 by jp