ceskaexpedice / ceska-digitalni-knihovna

Automatically exported from code.google.com/p/ceska-digitalni-knihovna
6 stars 1 forks source link

Stručný návod nastavení bezpečného kanálu pro nové ČDK (platí pro K5) #43

Closed mduda100871 closed 8 months ago

mduda100871 commented 1 year ago

Následuje popis ručního postupu vytvoření chráněného kanálu (dále jen endpoint) pro ČDK agregátor / platí pro distribuci Debian GNU/Linux 11 (Bullseye x64), pro ostatní distribuce se může mírně lišit.

Poznámka: doménu domena.nekde.cz nahradit doménou, pod kterou běží/poběží instance Krameria s příslušným endpointem.

  1. Vytvoření adresářové struktury:
    
    root@stroj:~# mkdir -p /usr/local/etc/ssl/{private,certs}/

root@stroj:~# chown -R 0.0 /usr/local/etc/ssl

root@stroj:~# chown -R 0.ssl-cert /usr/local/etc/ssl/private

root@stroj:~# chmod 750 /usr/local/etc/private


2. Vytvoření lokální certifikační autority (dále jen CA), která bude pak použita pro podepsání certifikátů pro server a ČDK harvester:

`root@stroj:~# pwgen`

příkaz vygeneruje množinu hesel, jedno vybrat, uložit (pro budoucí využití) do:

root@stroj:~# vim /usr/local/etc/ssl/kramerius-ca.cred <- uložit heslo

root@stroj:~# chmod 600 /usr/local/etc/ssl/kramerius-ca.cred

root@stroj:~# chown 0.0 /usr/local/etc/ssl/kramerius-ca.cred

použít vybrané heslo:

`root@stroj:~# openssl genrsa -des3 -out /usr/local/etc/ssl/private/kramerius-ca.key 2048`

datum expirace nastavit dlouhé (zde 20 let - 7300 dní):

root@stroj:~# openssl req -x509 -new -nodes -key /usr/local/etc/ssl/private/kramerius-ca.key -sha256 -days 7300 -out /usr/local/etc/ssl/certs/kramerius-ca.crt


3. Vytvoření certifikátu pro endpoint na straně lokální instance Krameria která bude zapojena do ČDK:

root@stroj:~# openssl genrsa -out /usr/local/etc/ssl/private/cdk-auth.domena.nekde.cz.key 2048

root@stroj:~# openssl req -new -key /usr/local/etc/ssl/private/cdk-auth.domena.nekde.cz.key -out /usr/local/etc/ssl/certs/cdk-auth.domena.nekde.cz.csr -addext "subjectAltName = DNS:cdk-auth.domena.nekde.cz"

do konfiguračního souboru:

`root@stroj~:# vim /usr/local/etc/ssl/cdk-auth.domena.nekde.cz.ext`

uložit obsah:

authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names

[alt_names] DNS.1 = cdk-auth.domena.nekde.cz

a dále použít (expirace 15 let):

root@stroj:~# openssl x509 -req -in /usr/local/etc/ssl/certs/cdk-auth.domena.nekde.cz.csr -CA /usr/local/etc/ssl/certs/kramerius-ca.crt -CAkey /usr/local/etc/ssl/private/kramerius-ca.key -CAcreateserial -out /usr/local/etc/ssl/certs/cdk-auth.domena.nekde.cz.crt -days 5475 -sha256 -extfile /usr/local/etc/ssl/cdk-auth.domena.nekde.cz.ext


4. Vytvoření certifikátu pro ČDK harvester (bez passphrase):

root@stroj:~# openssl genrsa -out /usr/local/etc/ssl/private/ceskadigitalniknihovna.cz.key 2048

root@stroj:~# openssl req -new -sha256 -key /usr/local/etc/ssl/private/ceskadigitalniknihovna.cz.key -out /usr/local/etc/ssl/certs/ceskadigitalniknihovna.cz.csr -addext "subjectAltName = DNS:czechdigitallibrary.cz"

do konfiguračního souboru:

`root@stroj:~# vim /usr/local/etc/ssl/ceskadigitalniknihovna.cz.ext`

uložit obsah:

subjectAltName = @alt_names

[alt_names] DNS.1 = czechdigitallibrary.cz

a dále použít (expirace 15 let):

root@stroj:~# openssl x509 -req -in /usr/local/etc/ssl/certs/ceskadigitalniknihovna.cz.csr -CA /usr/local/etc/ssl/certs/kramerius-ca.crt -CAkey /usr/local/etc/ssl/private/kramerius-ca.key -CAcreateserial -out /usr/local/etc/ssl/certs/ceskadigitalniknihovna.cz.crt -days 5475 -sha256 -extfile /usr/local/etc/ssl/ceskadigitalniknihovna.cz.ext


5. Privátní klíč a certifikát klienta, vytvořené v bodu 4, předat bezpečným způsobem správci ČDK (kontakty podchycené v příslušné smlouvě).

6. Fragment konfigurace pro Apache webserver (u proxy modulu případně upravit číslo portu na kterém na backendu poslouchá Tomcat s jádrem Krameria - zde 8080, případně i IP adresu):
ServerAdmin webmaster@domena.nekde.cz ServerName cdk-auth.domena.nekde.cz HostnameLookups On ServerSignature Off SSLEngine On SSLUseStapling Off SSLVerifyClient require SSLVerifyDepth 10 SSLCertificateFile /usr/local/etc/ssl/certs/cdk-auth.domena.nekde.cz.crt SSLCertificateKeyFile /usr/local/etc/ssl/private/cdk-auth.domena.nekde.cz.key SSLCACertificateFile /usr/local/etc/ssl/certs/kramerius-ca.crt DocumentRoot "/var/www/cdk-auth.domena.nekde.cz" Options -Indexes +FollowSymLinks +MultiViews SSLOptions +StdEnvVars AllowOverride None Require expr %{SSL_CLIENT_S_DN_CN} == "ceskadigitalniknihovna.cz" Require expr %{SSL_CLIENT_S_DN_CN} == "czechdigitallibrary.cz" ErrorLog ${APACHE_LOG_DIR}/cdk-auth.domena.nekde.cz-error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/cdk-auth.domena.nekde.cz-access.log combined # pro debug ucely logovat obsah autorizacniho tokenu z CDK LogFormat "%h -> %t -> \"Status: %>s\" -> \"CDK_TOKEN_PARAMETERS: %{CDK_TOKEN_PARAMETERS}i\"" cdk-auth-audit CustomLog ${APACHE_LOG_DIR}/cdk-auth.domena.nekde.cz-audit.log cdk-auth-audit ProxyIOBufferSize 65536 SSLOptions +StdEnvVars Require expr %{SSL_CLIENT_S_DN_CN} == "ceskadigitalniknihovna.cz" Require expr %{SSL_CLIENT_S_DN_CN} == "czechdigitallibrary.cz" ProxyPreserveHost On ProxyPass "http://localhost:8080/search/api/v5.0/cdk/forward/$1" retry=5 ProxyPassReverse "http://localhost:8080/search/api/v5.0/cdk/forward/$1" RewriteEngine On # LogLevel debug rewrite:trace5 RewriteRule "^/search/api/v5.0/cdk/forward$" "https://%{HTTP_HOST}/search/api/v5.0/cdk/forward/" [R=301,L]


7. Upravit konfiguraci jádra Krameria -> povolit autorizační endpoint jádra

odkomentovat v konfiguračním souboru web.xml:

`kramerius@stroj:~$ vim $CATALINA_BASE/webapps/search/WEB-INF/web.xml`

![web xml-00](https://user-images.githubusercontent.com/8750622/223075879-57888136-4e8e-45b3-9c10-883e7125015e.png)

Restart instance Krameria a testování.

Pro K7 bude zřejmě postup stejný/obdobný.

MD
zabak commented 1 year ago

Prosím o vložení návodu na wiki, alespoň pro K7

pavel-stastny commented 1 year ago

@zabak Presunu na wiki. K7 po zprovozneni vuci mzk.

zabak commented 8 months ago

Je to zde: https://github.com/ceskaexpedice/ceska-digitalni-knihovna/wiki/Zabezpe%C4%8Den%C3%A1-komunikace-chr%C3%A1n%C4%9Bn%C3%BD-kan%C3%A1l