Certyfikaty klienta

Logowanie za pomocą certyfikatu klienta

Od dawna znana jest możliwość logowania do serwisu NickServ z wykorzystaniem hasła do nicka. Natomiast od niedawna dostępne jest rozwiązanie alternatywne, wykorzystujące możliwość połączenia SSL: logowanie za pomocą certyfikatu klienta. Metoda ta nie wymaga podawania hasła – nie trzeba go ani wpisywać ręcznie przy każdym połączeniu, ani ustawiać i zapisywać w swoim programie. Polega ona na stworzeniu certyfikatu, który jest unikalny dla Twojego klienta i używanego do nawiązywania połączenia SSL. Certyfikat taki posiada tzw "odcisk palca" (certificate fingerprint, certfp), który można dodać do specjalnej listy w usłudze NickServ, dzięki czemu klient ten zostanie w momencie połączenia zalogowany do swojego konta (niezależnie nawet od używanego nicka). Jeśli korzystasz z wielu klientów, nie ma problemu – lista w NickServ może zawierać wiele certyfikatów, więc można dodać do niej każdy z programów.

Konfiguracja certyfikatu w programie Irssi

Zakładamy, że korzystasz ze shella systemu Linux lub podobnego, i posiadasz wszelkie niezbędne programy (są one dostępne domyślnie w większości dystrybucji).

Aby stworzyć certyfikat nie posiadający hasła i ważny przez 600 dni, użyj polecenia (w shellu):

openssl req -newkey rsa:2048 -days 600 -x509 -keyout irssi.key -out irssi.crt -nodes

Program zada kilka pytań, odpowiedzi nie mają znaczenia. Jeśli chcesz, aby certyfikat miał hasło, usuń argument -nodes (przy generacji pojawi się dodatkowe pytanie o "pass phrase"). Aby certyfikat był ważny bezterminowo, usuń argument -days 600. Wygenerowane zostaną pliki irssi.key oraz irssi.crt.

Następnie stwórz plik irssi.pem, ustaw mu odpowiednie uprawnienia, i usuń oba poprzednio wygenerowane pliki:

cat irssi.crt irssi.key > ~/.irssi/irssi.pem
chmod 600 ~/.irssi/irssi.pem
rm irssi.crt irssi.key

"Odcisk palca" możesz uzyskać (wyświetli się w terminalu) używając polecenia:

openssl x509 -sha1 -fingerprint -noout -in ~/.irssi/irssi.pem | sed -e 's/^.*=//;s/://g;y/ABCDEF/abcdef/'

Rozłącz się z serwerem IRC poleceniem /disconnect PIRC. Usuń posiadane serwery sieci PIRC, a następnie dodaj nowy z odpowiednimi opcjami – wpisz w Irssi:

/server add -ssl_cert ~/.irssi/irssi.pem -ssl_pass hasło_do_certyfikatu -network PIRC irc.pirc.pl 6601

Oczywiście pomiń opcję -ssl_pass jeśli Twój certyfikat nie ma hasła. Teraz połącz się z siecią, zaloguj do nicka (jeszcze używając hasła) i dodaj aktualnie używany "odcisk palca":

/connect PIRC
/msg NickServ IDENTIFY hasło
/msg NickServ CERT ADD

Sprawdź listę certyfikatów przypisanych do nicka, i upewnij się, że jest na niej "odcisk palca" uzyskany wcześniej:

/msg NickServ CERT LIST

Jeśli wszystko się powiodło, będziesz od teraz logować się za pomocą swojego certyfikatu, nie używając hasła. Uprawnienia do konta w NickServ powiązanego z posiadanym certyfikatem uzyskasz nawet używając innego nicka.

Konfiguracja certyfikatu w programie WeeChat

Najpierw generujemy certyfikat następującymi poleceniami (szczegółowych informacji szukaj w instrukcji dla Irssi powyżej):

mkdir ~/.weechat/ssl
openssl req -newkey rsa:2048 -x509 -keyout nick.key -out nick.crt -nodes
cat nick.crt nick.key > ~/.weechat/ssl/nick.pem
chmod 600 ~/.weechat/ssl/nick.pem
rm nick.crt nick.key

Teraz skonfigurujmy sieć PIRC w WeeChat (najpierw rozłącz się z serwerem):

/server add PIRC irc.pirc.pl/6601
/set irc.server.PIRC.ssl on
/set irc.server.PIRC.ssl_cert "%h/ssl/nick.pem"
/connect PIRC

... i dodaj certyfikat do listy NickServ:

/msg NickServ IDENTIFY hasło
/msg NickServ CERT ADD

Gotowe!