Wykonanie własnego CA

W chwili obecnej dostępne są darmowe certyfikaty, niemniej może być przydatne utworzenie własnego CA np. na potrzeby deszyfracji ruchu webowego dla przeglądarek. Dodatkowo własne CA pozwala na wykorzystanie uwierzytelniania z wykorzystaniem certyfikatu klienta zamiast klasycznego login/hasło.

Wymagane komponenty

Przede wszystkiem OpenSSL z ports albo z systemu bazowego. Dodatkowo potrzebny będzie Makefile z repozytroum skryptów jak również pliki konfiguracyjne dla OpenSSLa. Wszystkie te pliki muszę wylądować w katalogu /usr/local/etc/ssl1.

Lokalne zmiany dla make

Plik Makefile do generowania certyfikatów posiada dużo zmiennych, które można ustawić wg lokalnych potrzeb serwera. Wszystkie te zmiany powinny znaleźć się w pliku __makefile_include__. Przykładowa zawartość może wyglądać następująco:

# ustawienia lokalne dla wybranych zmiennych
#
BSD_SERWIS_LOCAL_CA_OPERATIONS=         yes
CRT_HOSTNAME=                           lab.wtp3.local

DAYS=                                   3685
CA_SIGN_DFLT_EXT=                       server_cert
CA_SIGN_CATRUE_EXT=                     v3_intermediate_ca
CSR_DFLT_EXT=                           server_cert
CSR_CATRUE_EXT=                         server_cert_ca
OPENSSL_CNF=                            ca-root.cnf
SHCRT_PARAMS=                           -text

CAKEY_CIPHER=                           aes128

CACRLFILE=$(CRT_SELFDIR)/crl/lab.ca.crl.pem
CAKEYFILE=$(CRT_SELFDIR)/private/lab.key.pem
CACRTFILE=$(CRT_SELFDIR)/certs/lab.crt.pem

Zmiany w konfiguracji OpenSSL

Pliki konfiguracyjne dla OpenSSL są utrzymywane w repozytirum skryptów. Niemniej w razie potrzeby za pomocą autorskiego skryptu unimaster będzie możliwość zachowania lokalnych zmian. Druga możliwość do wpisywanie za każdym razem lokalnych ustawień domyślnych :)

string mask oraz policy_match

W trakcie tworzenia kolejnych certyfikatów może się pojawić komunikat o niezgodności polityki zgodności pomiędzy certyfikatem CA a nowo wygenerowanym csr/ Należy sprawdzić ustawienia dotyczące string_mask oraz policy_match:

# For the CA policy
[ policy_match ]
countryName             = match
stateOrProvinceName     = match

[req]
# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix   : PrintableString, BMPString (PKIX recommendation before 2004)
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
string_mask = utf8only

W razie czego trzeba zmienić jedno z w/w ustawień:

[ policy_match ]
countryName             = match
stateOrProvinceName     = supplied

[req]
string_mask = pkix