NAZWA¶
config - biblioteka plików konfiguracyjnych OpenSSL CONF
OPIS¶
Biblioteka OpenSSL CONF służy do wczytywania plików
konfiguracyjnych. Obsługuje główny plik konfiguracyjny
OpenSSL
openssl.cnf oraz kilka innych, jak na przykład pliki
SPKAC i pliki rozszerzenia certyfikatów dla narzędzi
x509. Aplikacje OpenSSL mogą także używać
biblioteki CONF do swych własnych celów.
Plik konfiguracyjny jest podzielony na sekcje. Każda z nich rozpoczyna
się wierszem
[ nazwa_sekcji ] i kończy wraz z
początkiem następnej sekcji lub wraz z końcem pliku.
Nazwa sekcji może się składać ze znaków
alfanumerycznych oraz znaków podkreślenia.
Pierwsza sekcja pliku konfiguracyjnego ma specjalne znaczenie i określana
jest jako sekcja
domyślna. Zwykle nie ma nazwy i znajduje
się na początku pliku, przed pierwszą nazwaną
sekcją. Nazwy są wyszukiwane najpierw w nazwanych sekcjach (o
ile takie są), a następnie w sekcji domyślnej.
Środowisko jest mapowane na sekcję o nazwie
ENV.
Komentarze należy poprzedzać znakiem
#.
Każda sekcja pliku konfiguracyjnego składa się z par
nazwa,wartość w formie
nazwa=wartość.
Łańcuch
nazwa może zawierać dowolne znaki
alfanumeryczne jak również niektóre znaki przestankowe,
takie jak
. , ; oraz
_.
Łańcuch
wartość składa się z
ciągu znaków pomiędzy znakiem
= a końcem
wiersza, z wyłączeniem wszelkich spacji poprzedzających
oraz końcowych.
Łańcuch wartości podlega przesłanianiu zmiennych.
Robi się to przez użycie formy
$zmienna lub
${zmienna}: zastępuje to wartość nazwanej zmiennej
w bieżącej sekcji. Można także
zastąpić wartość z innej sekcji przy użyciu
formy
$sekcja::nazwa lub
${sekcja::nazwa}. Zmienne
środowiskowe przesłania się za pomocą konstrukcji
$ENV::nazwa. W ten sam sposób można także
definiować zmienne środowiskowe, jeśli tylko program
wyszukuje je za pośrednictwem biblioteki
CONF zamiast
bezpośredniego wywołania
getenv().
Można cytować poszczególne znaki przez dowolny znak
cytowania lub znak
\. Przez postawienie znaku
\ na końcu
wiersza łańcuch
wartość można
rozciągać na kilka wierszy. Tę samą funkcję
pełnią też sekwencje
\n,
\r,
\b oraz
\t.
KONFIGURACJA BIBLIOTEKI OPENSSL¶
W OpenSSL 0.9.7 i późniejszych aplikacje mogą automatycznie
konfigurować niektóre aspekty OpenSSL, używając do
tego głównego pliku konfiguracyjnego OpenSSL lub alternatywnego
pliku konfiguracyjnego. Narzędzie użytkowe
openssl
zawiera w sobie taką funkcjonalność: dowolne podpolecenie
używa głównego pliku konfiguracyjnego OpenSSL, chyba
że podpoleceniu przekazano opcję nakazującą
użycie alternatywnego pliku konfiguracyjnego.
Aby włączyć konfigurację biblioteki, sekcja
domyślna musi zawierać odpowiednią linię,
wskazującą na główną sekcję
konfiguracji. Domyślną nazwą używaną przez
narzędzie użytkowe
openssl jest
openssl_conf. Inne
aplikacje mogą używać alternatywnych nazw takich jak
aplikacja_conf.
Sekcja konfiguracji powinna się składać ze zbioru par
nazwa,
wartość, zawierających
odpowiednią konfigurację modułu.
nazwa oznacza
nazwę
modułu konfiguracji, znaczenie
wartości zależy od modułu: może na
przykład oznaczać inną, specyficzną dla
modułu, sekcję konfiguracji. Przykład:
openssl_conf = openssl_init
[openssl_init]
oid_section = nowe_oidy
engines = sekcja_silnika
[nowe_oidy]
... tutaj nowe oidy ...
[sekcja_silnika]
... tutaj rzeczy związane z silnikiem ...
Obecnie istnieją dwa moduły konfiguracyjny: jeden dla
obiektów ASN1, a drugi dla konfiguracji SILNIKA.
MODUŁ KONFIGURACJI OBIEKTU ASN1¶
Nazwą tego modułu jest
oid_section.
Wartość tej zmiennej wskazuje na sekcję
zawierającą pary nazwa,wartość OID-ów:
nazwą jest krótka i długa nazwa OID-u,
wartością jest numeryczny OID. Chociaż niektóre
polecenia użytkowe
openssl już zawierają
swoją własną sekcję OBIEKTU ASN1, to jednak
nie wszystkie to robią. Używając modułu
konfiguracji OBIEKTU ASN1,
wszystkie polecenia użytkowe
openssl, mogą widzieć zarówno nowe obiekty,
jak i wszystkie zgodne aplikacje. Na przykład:
[new_oids]
jakiś_nowy_oid = 1.2.3.4
jakiś_inny_oid = 1.2.3.5
OpenSSL 0.9.8 umożliwia także ustawienie wartości na
długą nazwę z przecinkiem i numerycznym OID.
Przykład:
krótkaNazwa = jakaś długa nazwa obiektu, 1.2.3.4
MODUŁ KONFIGURACJI SILNIKA¶
Moduł konfiguracji SILNIKA ma nazwę
engines.
Wartość tej zmiennej wskazuje na sekcję
zawierającą dalsze informacje o konfiguracji SILNIKA.
Sekcja wskazywana przez
engines jest tabelą nazw silników
(patrz jednak
engine_id poniżej), a kolejne sekcje
zawierają konfigurację specyficzną dla każdego
SILNIKA.
Każda sekcja specyficzna dla SILNIKA jest używana do ustawiania
domyślnych algorytmów, ładowania bibliotek dynamicznych,
przeprowadzania inicjowania oraz wysyłania poleceń kontrolnych.
Właściwa operacja zależy od nazwy
polecenia,
która jest nazwą pary nazwa,wartość. Rozpoznawane
polecenia przedstawiono poniżej.
Na przykład:
[sekcja_silnika]
# Konfiguracja SILNIKA nazwanego "foo"
foo = sekcja_foo
# Konfiguracja SILNIKA nazwanego "bar"
bar = sekcja_bar
[sekcja_foo]
... polecenia specyficzne dla SILNIKA "foo" ...
[sekcja_bar]
... polecenia specyficzne dla SILNIKA "bar" ...
Polecenie
engine_id jest używane do nadania nazwy SILNIKOWI.
Jeśli jest używane, musi występować pierwsze. Na
przykład:
[sekcja_silnika]
# Normalnie ta sekcja obsłużyłaby SILNIK nazwany "foo"
foo = sekcja_foo
[sekcja_foo]
# Nadpisuje domyślną nazwę i używa "myfoo" zamiast niej.
engine_id = myfoo
Polecenie
dynamic_path ładuje i dodaje SILNIK z podanej
ścieżki. Jest to odpowiednik wysyłania polecenia
kontrolnego
SO_PATH z bieżącą
wartością ścieżki, po której dodano
LIST_ADD z wartością 2 i
LOAD do dynamicznego
SILNIKA. Jeśli nie jest to pożądane zachowanie, to te
alternatywne kontrolki mogą zostać wysłane do
dynamicznego SILNIKA za pomocą odpowiednich poleceń kontrolnych.
Polecenie
init określa, czy inicjować SILNIK. Jeśli
wartością jest
0, to SILNIK nie będzie inicjowany.
Jeśli wartością jest
1, to natychmiast wykonywana
jest próba inicjacji SILNIKA. Jeśli nie podano polecenia
init, to będzie wykonana próba inicjacji SILNIKA po
przetworzeniu wszystkich poleceń z jego sekcji.
Polecenie
default_algorithms ustawia domyślne algorytmy,
których SILNIK będzie dostarczał przy użyciu
funkcji
SILNIK_set_default_string().
Jeśli nazwa nie pasuje do żadnej z powyższych nazw
poleceń, to przyjmuje się, że jest to polecenie kontrolne
wysyłane do SILNIKA. Wartością polecenia jest argument
podanej nazwy. Jeśli wartością jest łańcuch
EMPTY, to do polecenia nie jest wysyłana żadna
wartość.
Na przykład:
[sekcja_silnika]
# Konfiguracja silnika nazwanego "foo"
foo = sekcja_foo
[sekcja_foo]
# Ładuje silnik z obiektu dynamicznego
dynamic_path = /ścieżka/do/sinlikfoo.so
# Polecenie kontrolne specyficzne dla foo
jakaś_kontrolka = jakaś_wartość
# Inne polecenie kontrolne, niepobierająca wartości
inna_kontrolka = EMPTY
# Przekazuj wszystkie domyślne algorytmy
default_algorithms = ALL
UWAGI¶
Jeżeli plik konfiguracyjny stara się przesłonić
nieistniejącą zmienną, ustawiany jest znacznik
błędu i plik nie zostaje wczytany. Może się to
stać podczas próby przesłaniania niezdefiniowanej
zmiennej środowiskowej. Na przykład w poprzedniej wesji OpenSSL
domyślny plik konfiguracji OpenSSL używał wartości
HOME, która może nie istnieć w systemach innych
niż uniksowe, co powodowało błąd.
Można to obejść za pomocą sekcji
domyślnej, w której znajdą się
domyślne wartości: jeżeli wśród zmiennych
środowiska nie znajdzie się danej wartości, zostanie
użyta właśnie wartość domyślna. Aby
ten sposób działał właściwie,
wartość domyślna musi zostać zdefiniowana w pliku
wcześniej niż przesłonięcie. Przykłady
można znaleźć w rozdziale
PRZYKŁADY.
Jeśli ta sama wartość jest zdefiniowana więcej
niż jeden raz, wszystkie wystąpienia poza ostatnim
zostaną pominięte bez komunikatu o błędzie. W
sytuacjach takich jak DN to samo pole może się pojawić
wielokrotnie - rozwiązaniem jest zwykle pomijanie znaków przed
początkową
., na przykład:
1.OU="Moje pierwsze OU"
2.OU="Moje Drugie OU"
PRZYKŁADY¶
Oto przykładowy plik konfiguracyjny, zawierający niektóre z
wymienionych wyżej elementów:
# To jest sekcja domyślna
HOME=/temp
RANDFILE= ${ENV::HOME}/.rnd
configdir=$ENV::HOME/config
[ sekcja_pierwsza ]
# Jesteśmy w sekcji pierwszej
# Cytowanie pozwala na używanie spacji poprzedzających i końcowych
cokolwiek = " dowolna nazwa zmiennej "
tekst = Łańcuch który może \
rozciągać się na kilka wierszy \
jeśli użyje się znaków \\ na końcu wiersza
komunikat = Witaj świecie\n
[ sekcja_druga ]
pozdrowienia = $sekcja_pierwsza::komunikat
Następny przykład pokazuje, jak bezpiecznie
przesłaniać zmienne środowiskowe.
Załóżmy, że chcemy, aby zmienna
tmpfile
wskazywała nazwę pliku roboczego. Katalog, w którym ten
plik się znajduje, można odczytać ze zmiennych
środowiskowych
TEMP lub
TMP, lecz mogą one nawet
nie mieć nadanej żadnej wartości. Jeśli po prostu
użyjemy nazw zmiennych środowiskowych i okaże się,
że one nie istnieją, to podczas próby otwarcia pliku
wystąpi błąd. Przy wykorzystaniu sekcji domyślnej
możemy spowodować, że najpierw będzie poszukiwana
zmienna
TEMP, następnie
TMP, a jeśli żadna
z nich nie będzie zdefiniowana, zostanie użyty katalog
/tmp.
TMP=/tmp
# Powyższa wartość jest używana, kiedy TMP nie ma w środowisku
TEMP=$ENV::TMP
# Powyższa wartość jest używana, kiedy TEMP nie ma w środowisku
tmpfile=${ENV::TEMP}/tmp.filename
BŁĘDY¶
W obecnej chwili nie ma sposobu na wykorzystanie znaków w zapisie
ósemkowym
\nnn. Wszystkie łańcuchy są
zakończone znakiem null, więc ten znak nie może
się pojawiać w wartościach.
Cytowanie nie jest całkiem porządne: po użyciu sekwencji w
rodzaju
\n nie można więcej używać
cytowania w tym samym wierszu.
Pliki są wczytywane tylko w jednym przebiegu. Z tego powodu
przesłanianie zmiennych działa tylko, jeżeli są
one zdefiniowane we wcześniejszych wierszach danego pliku.
ZOBACZ TAKŻE¶
x509(1),
req(1),
ca(1)
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Daniel Koć (PTM) <kocio@linuxnews.pl> i Robert Luberda
<robert@debian.org>.
Polskie tłumaczenie jest częścią projektu
manpages-pl; uwagi, pomoc, zgłaszanie błędów na
stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z
wersją
1.0.1i oryginału.