Jira Umstellung auf SSL unter Linux

Um Jira auf SSL umzustellen, benötigt man im Grunde nur ein valides SSL Zertifikat und muss eine Anpassung in der server.xml vornehmen.

Die nachfolgende Durchführung ist Linux bezogen.

Die Jira-Pfade lauten:

  • Java Home: /opt/atlassian/jira/jre/bin/keytool
  • Jira Home: /var/atlassian/application-data/jira
  • Jira Install: /opt/atlassian/jira/

Erstellen des SSL Zertifikat (selbst signiert)

Jira speichert die Zertifikate im eigenen Java Keystore.

/opt/atlassian/jira/jre/bin/keytool -genkey -alias jira -keyalg RSA -keystore /var/atlassian/application-data/jira/jira.jks

Hier wird anschließend das Passwort des Zertifikatsspeichers hinterlegt sowie die Informationen, welche im Zertifikat hinterlegt sein sollen.

Wer sein Zertifikat von einer CA signieren lassen will, findet hier weitere Infos.

Anschließend kann man verifizieren, dass das Zertifikat vorliegt:

/opt/atlassian/jira/jre/bin/keytool -list -alias jira -keystore /var/atlassian/application-data/jira/jira.jks

Der Eintrag sollen einen “PrivateKeyEntry” beinhalten.

jira, 17.02.2017, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): FF:09:6F:4D:CA:B4:2D:D3:EF:F8:D9:CC:51:AA:66:F8:22:B9:97:CA

Tomcat Anpassungen (server.xml)

Die Konfiguration des Tomcat Webservers befindet sich in folgender Datei: <JIRA_INSTALL>/conf/server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxHttpHeaderSize="8192" SSLEnabled="true"
maxThreads="150" minSpareThreads="25"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true"
keyAlias="jira" keystoreFile="<JIRA_HOME>/jira.jks" keystorePass="changeit" keystoreType="JKS"/>

Anschließend kann Jira neu gestartet werden und die sichere Verbindung unter https://jira.domain.whatever:8443 abgerufen werden.

Anpassungen des ReverseProxys

Da Jira unter Linux nicht auf den bekannten http-Ports 80 und 443 laufen kann, wird im Normalfall ein Proxy vorgeschaltet.

Dieser muss für die neue Konfiguration angepasst werden:

<VirtualHost *:80>
ServerName jira.domain.de
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ServerName jira.domain.de

ErrorDocument 502 /502/index.html
ErrorDocument 503 /503/index.html

SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/myssl/cert.pem
SSLCertificateKeyFile /etc/myssl/cert.key
SSLCertificateChainFile /etc/myssl/intermediate.crt

ProxyPreserveHost on
ProxyPass /503 !
ProxyPass /502 !
<Location />
Deny from all
Allow from 172.30
ProxyPass https://172.30.18.51:8443/
ProxyPassReverse https://172.30.18.51:8443/
</Location>
<Location /servicedesk>
ProxyPass https://172.30.18.51:8443/servicedesk
ProxyPassReverse https://172.30.18.51:8443/servicedesk
</Location>
</VirtualHost>

Die HTTP-Verbindungen werden mit o.g. Konfiguration auf HTTPS umgeleitet, sodass kein direkter, unverschlüsselter Zugriff mehr möglich ist. Ebenfalls werden eigene Error-Dokumente für die Fehler 502 und 503 hinterlegt, welche direkt auf dem Proxy liegen und daher nicht umgeleitet werden sollen. In meinem Fall wird der Zugriff auf die Haupt-Jira-Instanz nur aus einem bestimmten IP-Subnet zugelassen. Die Servicedesk-Seiten sollen allerdings von überall aus erreichbar sein.

Apache Dienst neustarten und fertig.

Advertisements

Jira Re-Indexing failed: failed to locate current segments_N file

Der Jira Index wurde beschädigt und kann nicht wiederhergestellt werden.

The issue index is inconsistent with the database state. Database has (5681) issues but the index has (0) issues.

Die Datenbank an sich ist noch intakt, jedoch wurde der Jira eigene Index zerstört.

Eine Neuindexierung über System – Advanced – Indexing schlägt fehl.

Im Catalina Log taucht folgende Meldung auf:
tail /opt/atlassian/jira/logs/catalina.out -f

[fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][...]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at com.atlassian.jira.task.ForkedThreadExecutor$ForkedRunnableDecorator.run(ForkedThreadExecutor.java:216)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.lucene.index.CorruptIndexException: failed to locate current segments_N file
        at org.apache.lucene.index.IndexFileDeleter.(IndexFileDeleter.java:219)
        at org.apache.lucene.index.IndexWriter.(IndexWriter.java:1173)
        at com.atlassian.jira.index.DefaultIndexEngine.clean(DefaultIndexEngine.java:176)
        ... 28 more

Zum Beheben, kann man Jira zwingen, den Index neu aufzubauen.
Dazu den Dienst stoppen, alle vorhandenen Indexdateien löschen/umbenennen und Jira neu starten.
service jira stop
cd /var/atlassian/application-data/jira/caches
mv indexes indexes_old
mkdir indexes
chown jira:jira indexes -R
service jira start

Achtung: Es werden bis zu Neuindexierung keinerlei Issues angezeigt!
Dann kann man die Neuindexierung im Menü starten.
jira-reindexing

[...]
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing started
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex All starting...
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 0% complete. Current index: Issue
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.issue.index.DefaultIndexManager] ReindexAll in foreground: {indexIssues=true, indexChangeHistory=true, indexComments=true, indexWorklogs=true, forceReloadFromDatabase=false}
IssueIndexer:thread-7 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 1% complete. Current index: Issue
[...]
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 100% complete. Current index: PortalPage
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex took: 390ms. Indexer: SharedEntityIndexManager: paths: []
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 100% complete. Current index:
JiraTaskExectionThread-1 INFO braun 628x131x1 7gi885 172.30.18.99,127.0.0.1 /secure/admin/IndexReIndex.jspa [c.a.j.util.index.CompositeIndexLifecycleManager] Reindex All complete. Total time: 95451ms. Reindex run: 27

[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]