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 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')
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
|