WebSphere MQ - Konfiguracja połączenia szyfrowanego SSL

Autor: Marcin Kasiński
24.04.2012 12:59:49 +0200

WebSphere MQ ma możliwość za pomocą SSL zabezpieczyć komunikacje kliencka, jak również komunikacje pomiędzy menadżerami. Każdemu menadżerowi przypisana jest własna baza certyfikatów i tą bazę będzie on używał przy połączeniach szyfrowanych. Baza ta jest w standardowym formacie pliku kdb. Ważne tu jest, że w celu poinformowania menadżera jakiego klucza prywatnego ma używać alias tego klucza musi nosić odpowiednią nazwę.

Nazwa ta to webspheremq{QMGNNAME} , gdzie {QMGNNAME} , to nazwa menadżera pisana małymi literami. Po odpowiednim przygotowaniu bazy możemy przystąpić do konfiguracji kanału.

Parametry menadżera

Parametry menadżera odpowiadające za komunikacje SSL to:

SSLKEYR

Określa plik z bazą certyfikatów bez rozszerzenia. Standardowo parametr ten ustawiony jest na : {MQDIR}/qmgrs/{QMGR_NAME}/ssl/key Oznacza to, że plik ten będzie nazywał się {MQDIR}/qmgrs/{QMGR_NAME}/ssl/key.kdb

SSLCRLNL

Określa obiekt namelist zawierający listę definicji połączeń do serwera LDAP. Poprzez te połączenia menadżer będzie weryfikował listę certyfikatów, które zostały anulowane.

SSLEV

Określa, czy jest w przypadku błędu podczas negocjacji SSL będzie generowany odpowiedni komunikat EVENT.

SSLCRYP

Określa parametry związane ze urządzeniem kryptograficznym jeśli jest wykorzystywane.

SSLFIPS

Określa ...

SSLRKEYC

Określa ilość bajtów, jaka jest przesłana lub odebrana pomiędzy renegocjacjami klucza SSL. Parametry kanału odpowiadające za komunikacje SSL to:

SSLCIPH

Określa CipherSpecs ( sposób szyfrowania ) jaki będzie użyty przy komunikacji.

SSLPEER

Określa dn, jaki zostanie zaakceptowany podczas połączenia SSL. Można tu stosować paterny. W momencie negocjacji połączenia z duga strona, jeśli certyfikat drugiej strony nie będzie się zgadzał z tym paternem połączenie nie zostanie nawiązane.

SSLCAUTH

Określa, czy wymagane jest aby strona kliencka przedstawiła się certyfikatem w celu autentykacji. Poniżej znajduje się kod modyfikujący kanał poprzez ustawienie CipherSpecs, CN'a drugiej strony jaki będzie akceptowany oraz konieczności weryfikacji certyfikatu strony łączącej się.

alter chl('receiver') chltype(rcvr) +

	SSLCAUTH(REQUIRED) +

	SSLCIPH(RC4_MD5_US) +

	SSLPEER('CN=QM1, OU=Data Center, O=IT Company')

Konfiguracja aplikacji

Jeśli chodzi o część aplikacyjną, to aby połączyć się z kanałem kliencki skonfigurowanym do obsługi SSL należy ustawić statyczne pole sslCipherSuite klasy MQEnvironment określające CipherSuite połączenia, które MUSI być identyczne jak to samo pole kanału klienckiego, do którego aplikacja chce się łączyć oraz dodatkowo zmienne systemowe javax.net.ssl.keyStore i javax.net.ssl.trustStore określające plik z kluczem prywatnym oraz z zaufanymi certyfikatami wraz z hasłami do tych plików javax.net.ssl.keyStorePassword i javax.net.ssl.trustStorePassword .

MQEnvironment.sslCipherSuite = "SSL_RSA_WITH_NULL_MD5";

System.setProperty("javax.net.ssl.keyStore", "D:\\sec\\client.jks");

System.setProperty("javax.net.ssl.keyStorePassword","haslo");

System.setProperty("javax.net.ssl.trustStore","D:\\sec\\client.jks");

System.setProperty("javax.net.ssl.trustStorePassword","haslo");


powrót
Zachęcam do przedstawienia swoich uwag i opinii w polu komentarzy.

Komentarze

Dodaj Komentarz