Wydrukuj tę dokumentację Pokaż jako slajdy

OpenXPKI

/!\ /!\ /!\ UWAGA!!! Poniższy opis dotyczy wersji 2.5.5. Nowa wersja 3.1.x wprowadza zmiany. Dotyczą głównie nazw plików konfiguracyjnych, nieco innej hierarchi plików. /!\ /!\ /!\

OpenXPKI [ 1 ] to oprogramowanie pozwalające na wygodny i łatwy (przeglądarka internetowa) zarządzanie certyfikatami SSL/TLS. Całość oprogramowania jest napisana w PERLu, zaś jako "backend" służy baza danych (domyślnie mySQL).

Instalacja

Za pomocą własnego repozytorium pakietów należy zainstalować oprogramowanie OpenXPKI:

pkg install -Uy security/p5-openxpki

Ustawienia zależności

Należy pamiętać, aby dla pakietu devel/p5-Log-Dispatch nie wybrać opcji APACHE: w przeciwnym przypadku będzie instalowany apache24 - zupełnie zbędne przy korzystaniu z nginx-a.

Przed pierwszym uruchomieniem

Zgodnie z wiadomością z pakietu instalacyjnego przy pierwszej instalacji (nie upgrade) należy wykonać następujące polecenia:

install -m 660 -o openxpki -g openxpki /dev/null /var/log/openxpki/openxpki.log
install -m 660 -o www -g www /dev/null /var/log/openxpki/webui.log
install -m 660 -o www -g www /dev/null /var/log/openxpki/scep.log
install -m 660 -o www -g www /dev/null /var/log/openxpki/soap.log

Nie można zapominać o właściwych uprawnieniach dla użytkownika www:

setfacl -m u:www:rwx::allow /var/log/openxpki/ /var/log/openxpki/webui.log

Konfiguracja bazy danych

OpenXPKI [ 1 ] opiera się o bazę danych. Preferowana to mySQL [ dok. 2 ] , ale na liście schematów do instalacji jest również PostgreSQL [ dok. 1 ] korzystać z bazy, należy doinstalować odpowiedni pakiet1:

# w przypadku bazy danych PostgreSQL
pkg install -Uy databases/p5-DBD-Pg

# w przypadku bazy danych mySQL
pkg install -Uy databases/p5-DBD-mysql

# w przypadku SQLite
pkg install -Uy databases/p5-DBD-SQLite

mySQL

Na podstawie dokumentacji dla mysql-a należy utworzyć dedykowaną bazę danych oraz wgrać stosowny schemat umieszczony w katalogu /usr/local/share/examples/openxpki/config/sql/:

CREATE DATABASE openxpkidb;

/* utworzenie użytkownika głównego (backend) */
CREATE USER 'openxpki_user'@'localhost' IDENTIFIED BY 'sekretne_haslo';
GRANT ALL ON openxpkidb.* TO 'openxpki_user'@'localhost';

/* utworzenie użytkownika dla WebUI (frontend) /*
CREATE USER 'openxpki_session'@'localhost' IDENTIFIED BY '__haslo__';
GRANT SELECT, INSERT, UPDATE, DELETE ON openxpkidb.frontend_session TO 'openxpki_session'@'localhost';


FLUSH PRIVILEGES;

oraz wgranie schematu do pustej bazy danych:

cat /usr/local/share/examples/openxpki/config/sql/schema-mysql.sql | mysql -u openxpki_user -p openxpkidb

PostgreSQL

Na podstawie dokumentacji dla postgres-a należy utworzyć dedykowaną bazę danych oraz wgrać stosowny schemat umieszczony w katalogu /usr/local/share/examples/openxpki/config/sql/:

createuser -U pgsql -DERSP xpki_user
createdb -U pgsql -E UTF8 -O xpki_user openxpkidb
cat /usr/local/share/examples/openxpki/config/sql/schema-psql.sql | psql -U xpki_user openxpkidb

Instalacja plików konfiguracyjnych

Należy zainstalować pliki konfiguracyjne dla demona openxpkid oraz dla webui:

cp -pr /usr/local/share/examples/openxpki/config/openxpki/config.d /usr/local/etc/openxpki/
cp -pr /usr/local/share/examples/openxpki/config/openxpki/webui /usr/local/etc/openxpki/

Poprawienie uprawnień do plików

Pliki konfiguracyjne nie posiadają dobrych uprawnień dla serwera webowego, dlatego też trzeba poprawić uprawnienia:

find /usr/local/etc/openxpki/ -type d -exec chmod o+x {} \;

Wygenerowanie haseł dla użytkowników

Statyczne hasła dla użytkowników (domyślnie raop) są przechoywane w plikach konfiguracyjnych w formie {SSHA}fdsfdsgssgsdgsdg. W celu wygenerowania takiego hasła należy użyć narzędzia:

openxpkiadm hashpwd

Podane hasła należy zapisać, aby potem pamiętać :-)

Niezbędne modyfikacje

Następujące pliki należy zmodyfikować w celu poprawnego działania openxpkid:

system/database.yaml

--- /usr/local/share/examples/openxpki/config/openxpki/config.d/system/database.yaml    2019-11-03 20:12:18.000000000 +0100
+++ /usr/local/etc/openxpki/config.d/system/database.yaml       2019-11-04 15:57:48.777877000 +0100
@@ -1,11 +1,11 @@
 main:
     debug: 0
     type: MySQL
-    name: openxpki
+    name: openxpkidb
     host: localhost
     port: 3306
-    user: openxpki
-    passwd: openxpki
+    user: openxpki_user
+    passwd: ********************

     # extra options passed to the driver as parameter
     #driver:

system/server.yaml

--- /usr/local/share/examples/openxpki/config/openxpki/config.d/system/server.yaml      2019-11-03 20:12:18.000000000 +0100
+++ /usr/local/etc/openxpki/config.d/system/server.yaml 2019-11-04 14:49:06.860446000 +0100
@@ -10,7 +10,7 @@ group:        openxpki
 socket_file:  /var/openxpki/openxpki.socket
 pid_file:     /var/openxpki/openxpkid.pid
 stderr:       /var/log/openxpki/stderr.log
-tmpdir:       /var/tmp
+tmpdir:       /var/tmp

 # This is experimental!
 #type: PreFork
@@ -55,6 +55,6 @@ service:

 # settings for i18n
 i18n:
-    locale_directory: /usr/share/locale
-    default_language: C
+    locale_directory: /usr/local/share/locale
+    default_language: pl_PL

webui/default.conf

--- /usr/local/share/examples/openxpki/config/openxpki/webui/default.conf       2019-11-03 20:12:18.000000000 +0100
+++ /usr/local/etc/openxpki/webui/default.conf  2019-11-04 22:46:29.543115000 +0100
@@ -18,7 +18,7 @@ scripturl = /cgi-bin/webui.fcgi
 # mapping rules must be given in [realm] section below
 #realm_mode = path

-locale_directory: /usr/share/locale
+locale_directory: /usr/local/share/locale
 default_language: en_US

 [session]
@@ -48,10 +48,10 @@ Directory = /tmp
 # otherwise an attacker on the webservice can access your backend tables!
 # CREATE USER 'openxpki_session'@'localhost' IDENTIFIED BY 'mysecret';
 # GRANT SELECT, INSERT, UPDATE, DELETE ON openxpki.frontend_session TO 'openxpki_session'@'localhost';
-#NameSpace = openxpki
-#DataSource = dbi:mysql:dbname=openxpki
-#User = openxpki_session
-#Password = mysecret
+##NameSpace = openxpkidb
+DataSource = dbi:mysql:dbname=openxpkidb
+User = openxpki_session
+Password = ********************
 # Encrypt the session tables
 #EncryptKey = SecretSessionKey
 # Log client IP in session table

config.d/realm/__REALM__/auth/handler.yaml

Pokazana zmiana dla jednego użytkownika. Można wybrać inne nazwy użytkowników i/lub hasła (domyślne hasło to openxpki):

--- /usr/local/share/examples/openxpki/config/openxpki/config.d/realm/ca-one/auth/handler.yaml  2019-11-03 20:12:18.000000000 +0100
+++ /usr/local/etc/openxpki/config.d/realm/ca-one/auth/handler.yaml     2019-11-13 21:06:06.353839000 +0100
@@ -34,7 +34,7 @@ Operator Password:
     role: RA Operator
     user:
         raop: "{ssha}JQ2BAoHQZQgecmNjGF143k4U2st6bE5B"
-        raop2: "{ssha}JQ2BAoHQZQgecmNjGF143k4U2st6bE5B"
+        raop2: "{ssha}gnqhDvh4y9w+TsGtzpZcD6ht0OlxZm1D"

 External Dynamic Role:
     type: External

config.d/realm/__REALM__/profile/I18N_OPENXPKI_PROFILE_USER.yaml

Plik2 zawiera konfigurację generowania certyfikatu dla podpisywania poczty. Główna zmiana dotyczy dłuższego (niż domyślne 6 miesięcy) okresu ważności certyfikatu. UWAGA!!! Ten okres nie może przekroczyć daty ważności certyfikatu pośredniego (inaczej openxpkid wyrzuca błąd i nie jest w stanie podpisać nowego certyfikatu).

--- /usr/local/share/examples/openxpki/config/openxpki/config.d/realm/ca-one/profile/I18N_OPENXPKI_PROFILE_USER.yaml    2019-11-03 20:12:18.000000000 +0100
+++ /usr/local/etc/openxpki/config.d/realm/ca-one/profile/I18N_OPENXPKI_PROFILE_USER.yaml       2019-11-13 13:16:56.791254000 +0100
@@ -3,7 +3,7 @@
 label: I18N_OPENXPKI_UI_PROFILE_USER_LABEL

 validity:
-    notafter: +0006
+    notafter: +0018

 style:
     00_user_basic_style:

Poprawki dla log.conf

Jeżeli nie zostanie poprawione w konfiguracji w/w plików, to należy utworzyć link symboliczny dla log.conf:

ln -s /usr/local/etc/openxpki/webui/log.conf /usr/local/etc/openxpki/log.conf

Instalacja plików witryny

Pliki witryny dzielą się na dwie składowe: pliki statyczne oraz skrypty CGI. Całość należy zainstalować na partycji posiadającej uprawnienia exec (szczególnie przy partycje zfs).

Utworzenie dedykowanej partycji

zfs create -o exec=on tank/www/htdocs/virtuals/openxpki
zfs set exec=on tank/www/htdocs/virtuals/openxpki
mkdir -p /var/www/htdocs/virtuals/openxpki/data/ /var/www/htdocs/virtuals/openxpki/cgi-bin/

Przekopiowanie plików

cp -pr /usr/local/share/examples/openxpki/cgi-bin /var/www/htdocs/virtuals/openxpki/
cp -pr /usr/local/share/examples/openxpki/htdocs/* /var/www/htdocs/virtuals/openxpki/data/

# ustawienie atrybutu exec dla plików (PERLowych)
chmod +x /var/www/htdocs/virtuals/openxpki/cgi-bin/*

shebangfix

W plikach fcgi należy poprawić ścieżkę do interpretera (perl-a), tak aby skrypty mogły być wykonane bezpośrendio z powłoki

find /var/www/htdocs/virtuals/openxpki/cgi-bin/ -type f -exec sed -i '' -e '1s|^\#![[:space:]]*/usr/bin/perl\([[:space:]]\)|\#!/usr/local/bin/perl\1|' {} \;

Uruchomienie usług

Za wszystkie operacje związane z certyfikatami oraz zapisem do bazy danych odpowiedzialny jest openxpkid. Dlatego musi być uruchomiony przez korzystaniem z WebUI. W tym celu należy ustawić zmienną dla skryptów startowych rc:

openxpki_enable="YES"

a następnie uruchomić dmeona

service openxpki start

Modyfikacja dostępu do socketu

Generalnie trzeba poprawić skrypty startowe, ale na wszelki wypadek można ustawić ręcznie:

chmod 0777 /var/openxpki/openxpki.socket

Wygenerowanie CA

Można wykorzystać skrypt /usr/local/share/examples/openxpki/config/sampleconfig.sh w celu wygenerowania CA oraz ustawień przy generowaniu certyfikatów. Jednakże plik należy skopiować gdzieś i odpowiednio go zmodyfikować.

--- /root/sampleconfig.sh       2019-11-08 12:33:13.713139782 +0100
+++ /root/bsd-serwis-ca.sh      2019-11-08 12:43:49.893410982 +0100
@@ -18,7 +18,7 @@ else
    exit 1
 fi

-REALM='democa'
+REALM='bsdserwis'
 FQDN=`hostname -f`
 # For automated testing we want to have this set to root
 # unset this to get random passwords (put into the .pass files)
@@ -50,24 +50,24 @@ PASS_SUFFIX='pass'
 BACKUP_SUFFIX='~'

 # root CA selfsigned (in production use company's root certificate)
-ROOT_CA='OpenXPKI_Root_CA'
+ROOT_CA='BSD_Serwis_Root_CA'
 ROOT_CA_REQUEST="${SSL_REALM}/${ROOT_CA}.${REQUEST_SUFFIX}"
 ROOT_CA_KEY="${SSL_REALM}/${ROOT_CA}.${KEY_SUFFIX}"
 ROOT_CA_KEY_PASSWORD="${SSL_REALM}/${ROOT_CA}.${PASS_SUFFIX}"
 ROOT_CA_CERTIFICATE="${SSL_REALM}/${ROOT_CA}.${CERTIFICATE_SUFFIX}"
-ROOT_CA_SUBJECT='/CN=OpenXPKI Root CA 1'
-ROOT_CA_SERVER_FQDN='rootca.openxpki.net'
+ROOT_CA_SUBJECT='/CN=BSD Serwis Root CA 1'
+ROOT_CA_SERVER_FQDN='ca.bsdserwis.com'

 # issuing CA signed by root CA above
-ISSUING_CA='OpenXPKI_Issuing_CA'
+ISSUING_CA='BSD_Serwis_Issuing_CA'
 ISSUING_CA_REQUEST="${SSL_REALM}/${ISSUING_CA}.${REQUEST_SUFFIX}"
 ISSUING_CA_KEY="${SSL_REALM}/${ISSUING_CA}.${KEY_SUFFIX}"
 ISSUING_CA_KEY_PASSWORD="${SSL_REALM}/${ISSUING_CA}.${PASS_SUFFIX}"
 ISSUING_CA_CERTIFICATE="${SSL_REALM}/${ISSUING_CA}.${CERTIFICATE_SUFFIX}"
-ISSUING_CA_SUBJECT='/C=DE/O=OpenXPKI/OU=PKI/CN=OpenXPKI Demo Issuing CA 1'
+ISSUING_CA_SUBJECT='/C=PL/O=BSD Serwis/OU=Security/CN=BSD Serwis Signing CA 1'

 # SCEP registration authority certificate signed by root CA above
-SCEP='OpenXPKI_SCEP_RA'
+SCEP='BSD_Serwis_SCEP_RA'
 SCEP_REQUEST="${SSL_REALM}/${SCEP}.${REQUEST_SUFFIX}"
 SCEP_KEY="${SSL_REALM}/${SCEP}.${KEY_SUFFIX}"
 SCEP_KEY_PASSWORD="${SSL_REALM}/${SCEP}.${PASS_SUFFIX}"
@@ -75,7 +75,7 @@ SCEP_CERTIFICATE="${SSL_REALM}/${SCEP}.$
 SCEP_SUBJECT="/CN=${FQDN}:scep-ra"

 # Apache WEB certificate signed by root CA above
-WEB='OpenXPKI_WebUI'
+WEB='BSD_Serwis_WebUI'
 WEB_REQUEST="${SSL_REALM}/${WEB}.${REQUEST_SUFFIX}"
 WEB_KEY="${SSL_REALM}/${WEB}.${KEY_SUFFIX}"
 WEB_KEY_PASSWORD="${SSL_REALM}/${WEB}.${PASS_SUFFIX}"
@@ -84,7 +84,7 @@ WEB_SUBJECT="/CN=${FQDN}"
 WEB_SERVER_FQDN="${FQDN}"

 # data vault certificate selfsigned
-DATAVAULT='OpenXPKI_DataVault'
+DATAVAULT='BSD_Serwis_DataVault'
 DATAVAULT_REQUEST="${SSL_REALM}/${DATAVAULT}.${REQUEST_SUFFIX}"
 DATAVAULT_KEY="${SSL_REALM}/${DATAVAULT}.${KEY_SUFFIX}"
 DATAVAULT_KEY_PASSWORD="${SSL_REALM}/${DATAVAULT}.${PASS_SUFFIX}"
@@ -96,11 +96,11 @@ DATAVAULT_SUBJECT='/CN=Internal DataVaul
 #
 BITS=4096
 DAYS=371 # 2 years (default value not used for further enhancements)
-RDAYS="3655" # 10 years for root
-IDAYS="1828" # 5 years for issuing
-SDAYS="365" # 1 years for scep
-WDAYS="1096" # 3 years web
-DDAYS="$RDAYS" # 10 years datavault (same a root)
+RDAYS="7355" # 20 years for root
+IDAYS="3655" # 10 years for issuing
+SDAYS="1835" # 5 years for scep
+WDAYS="1098" # 3 years web
+DDAYS="$RDAYS" # 20 years datavault (same a root)

 # creation neccessary directories and files
 echo -n "creating configuration for openssl ($OPENSSL_CONF) .. "

Konfiguracja nginx

Konfiguracja nginx-a jest wykonana jako "lokacja" dowolnego serwera witualnego34.

    location /.well-known/est {
        alias /var/www/htdocs/virtuals/openxpki/cgi-bin/est.fcgi;
        gzip off;
        fastcgi_pass  unix:/var/run/fcgiwrap/fcgiwrap.sock;
        fastcgi_index est.fcgi;
        fastcgi_param SCRIPT_FILENAME  $request_filename;
        include fastcgi_params;
        fastcgi_param REMOTE_USER $remote_user;
        fastcgi_intercept_errors off;
        fastcgi_read_timeout 180;
    }
    location /openxpki/ {
        alias /var/www/htdocs/virtuals/openxpki/data/;
        index index.html;
    }

    location ~ ^/(scep|soap|rpc)/$ {
        alias /var/www/htdocs/virtuals/openxpki/cgi-bin/$1.fcgi;
        gzip off;
        fastcgi_pass  unix:/var/run/fcgiwrap/fcgiwrap.sock;
        fastcgi_index $1.fcgi;
        fastcgi_param SCRIPT_FILENAME  $request_filename;
        include fastcgi_params;
        fastcgi_param REMOTE_USER $remote_user;
        fastcgi_intercept_errors off;
        fastcgi_read_timeout 180;
    }

    location ~ ^/cgi-bin/(?<oxp>.*)\.fcgi$ {
        alias /var/www/htdocs/virtuals/openxpki/cgi-bin/$oxp.fcgi;
        gzip off;
        fastcgi_pass  unix:/var/run/fcgiwrap/fcgiwrap.sock;
        fastcgi_index webui.fcgi;
        fastcgi_param SCRIPT_FILENAME  $request_filename;
        include fastcgi_params;
        fastcgi_param REMOTE_USER $remote_user;
        fastcgi_intercept_errors off;
        fastcgi_read_timeout 180;
    }

Źródła w sieci internet

  1. OpenXPKI

  2. OpenXPKI: szybki start

  3. SOAP w OpenXPKI

  4. EST

  5. Simple Certificate Enrollment Protocol

Odnośniki do dokumentacji

  1. poudriere

  2. konfiguracja mySQL

  3. konfiguracja PostgreSQL

  4. page4


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

  1. Na podstawie dyskusji mailowej z deweloperem, wynika, że oprócz mySQL-a wspierany jest PostgreSQL (być może dotyczy wersji 3.x). SQLite nie jest aktualnie wspierany. (1)

  2. W wersji 3.x plik jest nazwany już inaczej. (2)

  3. 05.11.2019: do sprawdzenia, jak to zrobić jako root dedykowanego serwera wirtualnego. (3)

  4. Docelowo można wykonać jako konfigurację dołączaną do serwera oraz przechowywaną w repozytorium konfiguracji. (4)

OpenXpki (ostatnio edytowane 2019-11-13 20:33:49 przez wtps0n)