SQL: Service Broker Connection handshake failed. The certificate used by the peer is invalid

20-Sie-2018

Pełna treść komunikatu z błędem to:

Connection handshake failed. The certificate used by the peer is invalid due to the following reason: Certificate not found. State 89

Istotne przy konfiguracji usług związanych z Service Brokerem opartym o certyfikaty jest to, że często nie liczy się nazwa certyfikatu, ale jego thumbprint (odcisk palca). Kiedy dwa serwery nawiązują połączenie jeden z nich mówi:

  • chcę się połączyć z Tobą korzystając z certyfikatu XYZ
  • a drugi serwer odpowiada – fajnie mam certyfikat XYZ i mam do niego klucz prywatny,  zacznijmy od autoryzacji….

W moim przypadku na tych dwóch rozmawiających serwerach były zainstalowane certyfikaty o tej samej nazwie, ale niestety były to kompletnie inne certyfikaty! Ich odciski palców się nie zgadzały!

Aby sprawdzić czy certyfikaty są takie same wykonałem na obu instancjach:

select * from sys.certificates

a potem porównałem pole thumbprint. Ponieważ się nie zgadzały wyeksportowałem certyfikat z jednego serwera (BACKUP CERTIFICATE – tylko klucz publiczny) i odtworzyłem go na drugim (CREATE CERTIFICATE…. FROM FILE=’..’). Ponieważ do certyfikatu był przywiązany jeszcze login, to i ten login  musiałem usunąć i odtworzyć.

Certyfikat występował w moim przypadku w bazie master (poziom instancji) i w bazie skonfigurowanej pod service broker. Wymieniłem go w obu miejscach

Pomocny link:

https://social.msdn.microsoft.com/Forums/Lync/en-US/7b4d9350-cf72-4d25-83d5-db39f1bb1c01/connection-handshake-failed-the-certificate-used-by-the-peer-is-invalid-due-to-the-following?forum=sqldatabasemirroring

Dodaj komentarz:

Autor: Rafał Kraik