The Magician

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/11 14:03] jpработа_с_сертификатами_exchange [2026/05/20 10:00] (current) jp
Line 3: Line 3:
 **Установка сертификатов для IMAP** **Установка сертификатов для IMAP**
  
-:!: //В случае, если мы используем wildcard-сертификат, напрямую назначать его службе IMAP не требуется.// +:!: //В случае, если мы используем wildcard-сертификат, дополнительно назначать его отдельно - не требуется.// 
  
 Необходимо только указать хостнейм для подключения, сервер сам найдёт wildcard-сертификат.  Необходимо только указать хостнейм для подключения, сервер сам найдёт wildcard-сертификат. 
  
-   Set-IMAPSettings -X509CertificateName mail.domain.com  +   Set-IMAPSettings -X509CertificateName mail.domain.com 
 +   Restart-Service MSExchangeIMAP4 
 +   Restart-Service MSExchangeIMAP4BE 
  
 Действующий сертификат IMAP будет не виден в списке назначенных сертификатов для сервиса IMAP, если вывести его следующей командой:  Действующий сертификат IMAP будет не виден в списке назначенных сертификатов для сервиса IMAP, если вывести его следующей командой: 
Line 15: Line 17:
 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 71:
 Если мы попробуем удалить старый сертификат после назначения нового через веб - мы получим сообщение, что сертификат нельзя удалять, т.к. он уже назначен коннектору отправки.  Если мы попробуем удалить старый сертификат после назначения нового через веб - мы получим сообщение, что сертификат нельзя удалять, т.к. он уже назначен коннектору отправки. 
  
 +;#;
 {{::certificate-removal-error.png?600|}} {{::certificate-removal-error.png?600|}}
 +;#;
  
 Это намекает нам на то, что сертификат необходимо поменять на коннекторе отправки тоже. Здесь есть нюанс, связанный с тем, что при простом выполнении команды //Get-SendConnector | fl//, мы не сможем получить thumbprint сертификата, а получим только имя. Если имена сертификатов совпадают, что часто бывает, когда продляем сертификат от одного и того же УЦ - потребуется сгенерировать имя нового сертификата специальным образом, как описано далее в этом разделе и установить его на коннектор.  Это намекает нам на то, что сертификат необходимо поменять на коннекторе отправки тоже. Здесь есть нюанс, связанный с тем, что при простом выполнении команды //Get-SendConnector | fl//, мы не сможем получить thumbprint сертификата, а получим только имя. Если имена сертификатов совпадают, что часто бывает, когда продляем сертификат от одного и того же УЦ - потребуется сгенерировать имя нового сертификата специальным образом, как описано далее в этом разделе и установить его на коннектор. 
Line 134: Line 147:
  
 {{::exchange_smtp_two_certs.jpg|}} {{::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/
 +
 +----
 +
 +=== Замена backend-сертификата ===
 +
 +В Exchange существует backend-сертификат, работающий для сайта //IIS// //Exchange Back End// в привязках к порту 444. Этот сертификат является самоподписанным и генерирурется обычно на срок 5 лет и имеет обычно имя: //"Microsoft Exchnage"//
 +
 +Посмотреть этот сертификат можно с помощью команды:
 +
 +<code>
 +Get-ExchangeCertificate | Where-Object {$_.FriendlyName -like "Microsoft Exchange"} | Format-List FriendlyName,Subject,CertificateDomains,Thumbprint,RootCAType,*PrivateKey*,NotBefore,NotAfter
 +</code>
 +
 +Если какие-то из свойств не отображаются в данной команде, можно вывести полный перечень:
 +
 +<code>
 +Get-ExchangeCertificate | Where-Object {$_.FriendlyName -like "Microsoft Exchange"} | Format-List *
 +</code>
 +
 +Скопируем отпечаток старого backend-сертификата, который мы нашли и сгенерируем новый сертификат командой:
 +
 +<code>
 +Get-ExchangeCertificate -Thumbprint "1AC4D54C18BC523EE9EB57FCE81F83F5400B4044" | New-ExchangeCertificate -Force -PrivateKeyExportable $false
 +</code>
 +
 +Теперь открываем MMC-оснастку с сертификатами локального компьютера, находим новый сертификат в контейнере //personal// и копируем в //Trusted Root Certification Authorities// (простым copy-paste).
 +
 +Далее через //Exchange Admin Center// (//ECP//) назначаем сертификат всем сервисам: //IMAP, POP, IIS, SMTP//.
 +
 +Проверяем привязки в диспетчере //IIS//. Для сайта //Default Web Site// во всех привязках необходимо использовать белые сертификаты. 
 +
 +А вот в привязке //Exchange Back End// на порту 444 как раз необходимо установить только что сгенерированный новый сертификат. 
 +
 +Пример:
 +
 +;#;
 +{{:exchange:exchange_backend_certificate_444.jpg?800}}
 +;#;
 +
 +После замены сертификата делаем рестарт IIS
 +
 +  iisreset
 +:!: После замены backend-сертификата - не будет лишним проверить - не прописался ли даный сертификат для //IMAP//, если мы его используем. В некоторых случаях наблюдалась следующая картина: имя сертификата в настройках IMAP перепрописывалось с общего имени, соответствующего wildcard, на имя конкретного Exchange-сервера. 
 +В этом случае меняем его обратно командой:
 +
 +  Set-IMAPSettings -X509CertificateName mail.domain.com 
 +
 {{tag>Exchange Microsoft Mail PowerShell Certificates}} {{tag>Exchange Microsoft Mail PowerShell Certificates}}
работа_с_сертификатами_exchange.1712844182.txt.gz · Last modified: by jp