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