Obsah

Konfigurace aplikací

Aplikace

Jira: https://jira.tool4dev.com
confluence: https://confluence.tool4dev.com - server dostupný jen lokálně
bitbucket: https://bitbucket.tool4dev.com - server dostupný jen lokálně - test vzdáleně přes OTP
bamboo: https://bamboo.tool4dev.com - server je vypnutý

Pozn: Na reverzním proxy jsou uvedeny chybně adresy pro confluence a bitbucket, proto nejsou servery dostupné z inetu.

Po výpadku a opětovném nahození app. serverů nezafungoval reverzní proxy na Apache.
Fungovalo jen přesměrování na firewallu a veškerý provoz končil na jira.hpl.cz.

Bylo nutné znovu načíst iptables a restartovat apache(nejsem si jistý pořadím).

Apache - obecná konfigurace pro všechny app. servery

apt-get install apache2
apt-get install libapache2-mod-jk
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp 
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
a2enmod proxy_ajp
a2enmod rewrite
a2enmod mod_jk
a2enmod mod_jk
a2enmod ssl

Konfigurační soubor server.xml

S vyjímkou Bitbucket je uložen v podsložce conf v HOME složce

/opt/atlassian/bamboo/current/conf

server.xml

Původní sekce Connecto je zneplatněná, místo ní je přidán následující kód:

server.xml
<Connector
   port="8090"
   redirectPort="8443"
   enableLookups="false"
   protocol="AJP/1.3"
   URIEncoding="UTF-8"
 
   maxThreads="100"
   minSpareThreads="10"
   connectionTimeout="60000"
 
   pollTime="4000"
   pollerSize="8192"
 
   disableUploadTimeout="true"
   acceptCount="100"
   secure="true"
   useBodyEncodingForURI="true"
   proxyName="confluence.hpl.cz"
   scheme="https"
   proxyPort="443"
/>

Upgrade

https://confluence.atlassian.com/adminjiraserver073/upgrading-jira-applications-using-a-rapid-upgrade-method-861253101.html
https://www.atlassian.com/software/jira/update

Jira upgrade z verze 7.1 na 7.3.5

Po upgrade Jira z verze 7.1 na 7.3.5 nebylo funkční připojení k web serveru přes https. Porovnáním s funkčním serverem nebylo aktivní spojení na portu 8009.

V rámci upgrade nebyly přeneseny násladující soubory:

server.conf a cacerts

Při použití původního souboru server.conf nebyla Jira funkční(neposlouchala na portu 8009). Po postupné editaci(pokus - omyl) server.conf byla Jira zprovozněna.

Soubor cacerts nyní již obsahuje root certifikáty pro cert. autoritu LetsEncrypt, takže nebylo nutné opět tyto cert nahrávat.

Jira upgrade z verze 7.3.6 na 7.4.0

Jira upgrade z verze 7.4.0 na 7.6.0 - obecný postup

Postup je stejný jako u předešlého upgrade. Poslední upgrade byl proveden z verze 7.3.6 na 7.4.0 a pak po dvo verzích az na 7.12.0

Bamboo

Postup: https://confluence.atlassian.com/bamboo/bamboo-upgrade-guide-720411366.html
Umístění důležitých složek a souborů: https://confluence.atlassian.com/bamboo/locating-important-directories-and-files-289277247.html

Upgrade z verze: 5.11.1.1

<bamboo-install> directory: /opt/atlassian/bamboo/current
<bamboo-home> directory: /var/atlassian/application-data/bamboo

Upgrade byl testován na kopii produkčního stroje

dd if=/dev/zvol/poolz1/VM/BAMBOO of=/dev/zvol/poolz1/VM/BAMBOO01

Kopie zařízení BAMBOO01 byla přimountována(pomocí příkazu kpartx). Následně změněna statická IP adresa(soubor interfaces)

kpartx -av /dev/zvol/poolz1/VM/BAMBOO01
mount /dev/mapper/BAMBOO01p1 /mnt/bamboo/
umount /mnt/bamboo
kpartx -dv /dev/zvol/poolz1/VM/BAMBOO01

Certifikáty LE pro novou doménu

/root/.acme.sh/acme.sh --issue -d jira.hpl.cz -d jira.griffteam.com -d jira.griffteam.cz -d jira.tool4dev.com -d www.tool4dev.com -w /home/letsencrypt/webroot/ --force

/root/.acme.sh/acme.sh --issue -d bamboo.hpl.cz -d bamboo.tool4dev.com -w /home/letsencrypt/webroot/ --force

/root/.acme.sh/acme.sh --issue -d bitbucket.hpl.cz -d bitbucket.tool4dev.com -d git.tool4dev.com -w /home/letsencrypt/webroot/ --force

/root/.acme.sh/acme.sh --issue -d confluence.hpl.cz -d confluence.tool4dev.com -w /home/letsencrypt/webroot/ --force

Obnova certifikátů

/root/.acme.sh/acme.sh --renew -d jira.hpl.cz -d jira.griffteam.com -d jira.griffteam.cz -d jira.tool4dev.com -d www.tool4dev.com -w /home/letsencrypt/webroot/ --force
 
/root/.acme.sh/acme.sh --renew -d bamboo.hpl.cz -d bamboo.tool4dev.com -w /home/letsencrypt/webroot/ --force

Skript pro obnovu a synchronizaci certifikátů

#! /bin/sh
 
/root/.acme.sh/acme.sh --renew -d bamboo.hpl.cz -d bamboo.tool4dev.com -w /home/letsencrypt/webroot/ --force
rsync -avz -e "ssh -i /root/.ssh/id_rsa" /root/.acme.sh/bamboo.hpl.cz/bamboo.hpl.cz.cer snemec@mail.hpl.cz:/home/snemec/Certs
/etc/init.d/apache2 restart
ssh snemec@mail.hpl.cz 'sudo /etc/init.d/apache2 restart'

Virtuální servery

Certifikáty

Popis fungování ověření na základě certifikátů od LE.

Certifikáty se používají pro konfiguraci přístupu k web rozhraní serverů přes protokol https.
Dále se používají k získání vztahu důvěry mezi jednotlivými servery. Hlavně mezi Bitbucket a JIRA.
Kde JIRA je ověřovatel.
S webovým rozhranním nebyl problém, ale docházelo k problémům s ověřením mezi servery, konkrétně mez Bitbucket a JIRA.
Problém byl když došlo k vydání certifikátů jinou mezilehlou (intermediate) certifikační autoritou(LE R10 - R13), pro konkrétní servery.
Pak docházelo k nesouladu mezi servery, protože např. pro Bitbucket vyl cert. vydán R11, ale pro JIRA byl vydán R13. To nemá vliv na https přístup, ale mělo to vliv na komunikaci mezi servery, protože CA certifikát pro konkrétní CA(R10 - R13) se ukládá do JAVA truststoru.
Po konzultaci s AI(Provozuji starší java aplikaci, do které musím ručně registrovat CA klíč. Rotace mezi R10 - R13 mi způsobuje problémy. Lze to řešit např. jedním CA souborem, který bude obsahovat všechny CA klíče?) jsem um9stil do JAVA truststoru ISRG Root X1 certifikát. Tomuto certifikátu by měly důvěřovat všechny mezilehlé (intermediate) certifikační autority(LE R10 - R13). Cert. jsem umístil 20.10.2025

Jira

https://jira.tool4dev.com

Restart serveru

/etc/init.d/jira start|stop

Test, že Jira poslochá na odpovídajících portech

netstat -anp|grep java|more  
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      6815/java
tcp6       0      0 :::8009                 :::*                    LISTEN      6815/java
tcp6       0      0 :::8080                 :::*                    LISTEN      6815/java
tcp6       0      0 :::8443                 :::*                    LISTEN      6815/java
tcp6      32      0 192.168.10.58:59362     104.192.142.44:443      CLOSE_WAIT  6815/java
tcp6       1      0 192.168.10.58:34039     192.168.10.61:443       CLOSE_WAIT  6815/java
tcp6       0      0 127.0.0.1:41047         127.0.1.1:3306          ESTABLISHED 6815/java
tcp6       1      0 192.168.10.58:45184     192.168.10.60:443       CLOSE_WAIT  6815/java
tcp6       1      0 192.168.10.58:33990     192.168.10.61:443       CLOSE_WAIT  6815/java
tcp6      32      0 192.168.10.58:59366     104.192.142.44:443      CLOSE_WAIT  6815/java
tcp6       0      0 127.0.0.1:40986         127.0.1.1:3306          ESTABLISHED 6815/java
tcp6       0      0 127.0.0.1:40953         127.0.1.1:3306          ESTABLISHED 6815/java

Vystavení certifikátu od cert. autority Let's Encrypt pomocí skriptu acme.sh https://github.com/Neilpang/acme.sh

Při vydávání certifikátu je použitý mód web root. Na straně web serveru musí být na portu 80 dostupný adresář s právy zápisu.
Původně byl Jira server dostupný jen na portu 443. V konfiguraci apache byl nastaven redirect z portu 80 na port 443
Veškeré dotazy na portu 80 jsou přesměrovány na port 443, kromě http://jira.hpl.cz/.well-known/

000-default.conf
Alias /.well-known/ /home/letsencrypt/webroot/.well-known/
<Directory /home/letsencrypt/webroot/>
    AllowOverride None
    Require all granted
    Satisfy Any
</Directory>
<VirtualHost *:80>
   RewriteEngine On
   RewriteCond %{HTTPS} !=on
   RewriteCond %{REQUEST_URI} !^/.well-known/
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
   #RewriteLog /var/log/rewrite.log
   #RewriteLogLevel 3
 
   #RedirectPermanent / "https://jira.hpl.cz/"
</VirtualHost>
default-ssl.conf
IfModule mod_ssl.c>
        <VirtualHost *:443>
                #<Proxy *>
                #       Order deny,allow
                #       Allow from all
                #</Proxy>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
                SSLEngine on
                SSLProxyEngine on
                ProxyPreserveHost on
                ProxyPass / ajp://localhost:8009/
                ProxyPassReverse / ajp://localhost:8009/
                SSLProxyCheckPeerCN off
                SSLCertificateFile  /etc/ssl/certs/jira.hpl.cz.cer
                SSLCertificateKeyFile /etc/ssl/private/jira.hpl.cz.key
                SSLCACertificateFile /etc/ssl/certs/ca.cer
                #SSLCertificateFile  /etc/ssl/certs/jira.hpl.cz.cer
                #SSLCACertificateFile /etc/ssl/certs/Intermediate_CA_chain.cer
                #SSLCertificateKeyFile /etc/ssl/private/jira.hpl.cz.key
                SSLProtocol +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
        </VirtualHost>
</IfModule>

Jira - konfigurace reverzního proxy

000-default.conf
<VirtualHost *:80>
    ServerName jira.hpl.cz
    ServerAlias jira.griffteam.com jira.griffteam.cz
    ProxyPreserveHost On
    ProxyRequests off
    ProxyPass / http://192.168.10.58/
    ProxyPassReverse / http://192.168.10.58/
</VirtualHost>
default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerName jira.hpl.cz
                ErrorLog ${APACHE_LOG_DIR}/error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
                SSLEngine on
                SSLProxyEngine on
                ProxyPreserveHost on
                ProxyPass / https://192.168.10.58/
                ProxyPassReverse / https://192.168.10.58/
                SSLProxyCheckPeerCN off
                SSLCertificateFile  /etc/ssl/certs/jira.hpl.cz.cer
                SSLCACertificateFile /etc/ssl/certs/ca.cer
                SSLCertificateKeyFile /etc/ssl/private/jira.hpl.cz.key
                SSLProtocol +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
        </VirtualHost>
</IfModule>

Jira - ověření na základě LE certifikátů

09.07.2024 - problém s přihlášenímm na Confluence a Bitbucket(Bamboo je trvale vypnutý).
Problém se podařilo vyřešit obnovením uložiště na Jira - viz popis níže a registrací ca.cer na Bitbucket a Confluence.
Na Confluence a Bitbucket musí být importován stejný ca.cer jako na Jira(konkrétně R11)

Po změně root LE Certifikátů přestalo fungovat přihlášení k Bitbucket, Confluence i Bambo.
Bylo potřeba znovu nahrát nový CA root certifikát na všechny servery.

Po instalaci certifikátů od Let's Encrypt byl sever dostupný přes webové rozhranní, ale přestal komunikovat s ostatními servery(bamboo, confluence, bitbucket). Application Links byl offline.

Na serveru Jira bylo nutné vložit certifikát cert. autority do souboru cacerts.

Při manipulaci s certifikáty je nutné zadat heslo k uložišti, pro cacerts i jks uložiště je použité defaultní heslo changeit

Import root certifikátu cert autority do uložiště cacerts

/opt/atlassian/jira/jre/bin/keytool -import -alias letsencrypt -keystore /opt/atlassian/jira/jre/lib/security/cacerts -file /root/.acme.sh/jira.hpl.cz/ca.cer

Pokud již existuje alias existuje alias letsencrypt - (keytool error: java.lang.Exception: Certificate not imported, alias <letsencrypt> already exists)

Je potřeba ho smazat a provést import znovu.

/opt/atlassian/jira/jre/bin/keytool -delete -alias letsencrypt -keystore /opt/atlassian/jira/jre/lib/security/cacerts

Import pfx certifikátu do jks uložiště

Dále je potřeba vytvořit pxf soubor a naimportovat ho do JKS uložiště.

Vytvoření pfx souboru

Ve složce kde se generují nové certifikáty - /root/.acme.sh/jira.hpl.cz/ jsem vytvořil složku pfx.
Do této složky jsem nakopíroval soubory:

-rw-r--r-- 1 root root 1586 Dec  7 00:05 ca.cer
-rw-r--r-- 1 root root 1939 Dec  7 00:05 jira.hpl.cz.cer
-rw-r--r-- 1 root root 1675 Jan 11  2017 jira.hpl.cz.key

Pro vygenerovaný pfx soubor je potřeba zadat heslo pro export - je jedno jaké heslo se použije. Slouží jen pro import od uložiště.

cd /root/.acme.sh/jira.hpl.cz/pfx
openssl pkcs12 -export -out jiraletscert.pfx -inkey jira.hpl.cz.key -in jira.hpl.cz.cer -certfile ca.cer

Import pfx do jks uložiště

Při importu do jks uložiště je potřeba zadat destination keystore password - použil jsem changeit
Dále je potřeba zadat Enter source keystore password: - heslo použité při generaci pfx souboru.

cd /root/.acme.sh/jira.hpl.cz/pfx
/opt/atlassian/jira/jre/bin/keytool -importkeystore -srckeystore jiraletscert.pfx  -srcstoretype pkcs12 -destkeystore jira.jks -deststoretype JKS

Import certifikátu cert autority do jks uložiště

cd /root/.acme.sh/jira.hpl.cz/pfx
/opt/atlassian/jira/jre/bin/keytool -import -alias rootCA -keystore jira.jks  -trustcacerts -file ca.cer
cp -a jira.jks /var/atlassian/application-data/jira/

Ověření - výpis uložených certifikátů v jks uložišti.

/opt/atlassian/jira/jre/bin/keytool -list -keystore /var/atlassian/application-data/jira/jira.jks
Enter keystore password:

Výpis by pak měl vypadat následovně:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

rootca, Jan 14, 2017, trustedCertEntry,
Certificate fingerprint (SHA1): E6:A3:B4:5B:06:2D:50:9B:33:82:28:2D:19:6E:FE:97:D5:95:6C:CB
1, Jan 14, 2017, PrivateKeyEntry,
Certificate fingerprint (SHA1): 81:11:2D:04:47:0B:7B:78:63:85:FC:8D:7A:83:39:FC:18:10:52:EE

Ve výpisu by měla být jedna položka trustedCertEntry a jedna položka PrivateKeyEntry
Oba výpisy musí mít stejné datum.

Na ostatních serverech(Bamboo, Bitbucket, Confluence) vložit ca.cer do souboru cacerts, postup je podobný jako pro Jiru.

#Bitbucket
/opt/atlassian/bitbucket/4.4.1/jre/bin/keytool -delete -alias letsencrypt -keystore /opt/atlassian/bitbucket/4.4.1/jre/lib/security/cacerts
/opt/atlassian/bitbucket/4.4.1/jre/bin/keytool -import -alias letsencrypt -keystore /opt/atlassian/bitbucket/4.4.1/jre/lib/security/cacerts -file /root/.acme.sh/bitbucket.hpl.cz/ca.cer
#Confluence
/opt/atlassian/confluence/jre/bin/keytool -delete -alias letsencrypt -keystore /opt/atlassian/confluence/jre/lib/security/cacerts
/opt/atlassian/confluence/jre/bin/keytool -import -alias letsencrypt -keystore /opt/atlassian/confluence/jre/lib/security/cacerts -file /root/.acme.sh/confluence.hpl.cz/ca.cer

Po vložení certifikátů restartovat aplikace.

Na Bamboo jsou je jks uložiště certifikátů v jiné cestě.

/usr/lib/jvm/java-8-oracle/jre/bin/keytool -import -alias letsencrypt02 -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -file /root/.acme.sh/bamboo.hpl.cz/ca.cer

Ověření dostupnosti lze provést pomocí skriptu SSLPoke

Důležité je provést kontrolu připojení z Bitbucket na Jira!

https://www.netiq.com/communities/cool-solutions/cool_tools/cacerts-dummies/
https://www.netiq.com/communities/cool-solutions/wp-content/uploads/sites/2/2012/02/installcert-sslpoke.zip
Stahnout zip, rozbalit, SSLPoke.class nahrat do bin(/opt/atlassian/jira/jre/bin)

bitbucket:/opt/atlassian/bitbucket/4.4.1/jre/bin# ./java SSLPoke jira.hpl.cz 443
Successfully connected

root@jira:/opt/atlassian/jira/jre/bin# ./java SSLPoke jira.hpl.cz 443
Successfully connected

Dostupnost(Application Links) lze kontrolovat jak lokálně na Jira serveru, tak mezi servery.

Confluence

https://confluence.tool4dev.com

root@confluence:~#  /etc/init.d/confluence
Usage: /etc/init.d/confluence {start|stop|restart}

Bitbucket

https://bitbucket.tool4dev.com

Home složka: /var/atlassian/application-data/bitbucket

Konfigurační soubor: /var/atlassian/application-data/bitbucket/shared/server.xml

Spouštěcí skripty:

bitbucket:~# /etc/init.d/atlbitbucket
Usage: /etc/init.d/atlbitbucket {start|stop|status}

Bamboo

https://bamboo.tool4dev.com

Home složka: /opt/atlassian/bamboo/current/

Konfigurační soubor: /opt/atlassian/bamboo/current/conf/server.xml

Spouštěcí skripty: Pozor app Bamboo se nenastartuje po restartu serveru. Je potřeba jí spustit ručně.

cd /opt/atlassian/bamboo/current/bin
./start-bamboo.sh

List trusted cert. auth

/usr/lib/jvm/java-8-oracle/jre/bin/keytool -list -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts |grep -B1 lets
DokuWiki Appliance - Powered by TurnKey Linux