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.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Daniel Koć (PTM) <[email protected]> i Robert Luberda <[email protected]>.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.