Abhängig von OS und Technologie können Zertifikate verschieden verwendet werden. Folgend wird auf die verschiedene Zertifikate Stores eingeangen: Windows, Unix und JKS (für Win und Unix).

Ausgangslage

  • Für SAP HANA Connections sollen intern signierte Zertifikate verwendet werden.
  • Es gibt eine interne CA, die Certs austellt.
  • Die Datenbank Verbindung kann grundsätzlich via JDBC oder hdbcli erfolgen.
  • Der Zugriff kann von Windows oder Unix erfolgen.

Cert Stores

Root-Zertifikate können entweder direkt als File (crt/pem) verwendet werden oder via einen Cert Store, der die Zertifikate geschützt zur Verfügung stellt:

  • Windows bietet dazu die Programme “Manage computer / user certifcates” (direkt via Start Menu) an. Resp. kann via MMC verwendet werden.
  • Linux hat das Package ca-certificates mit dem Befehl update-ca-certificates
    apt install -y ca-certificates
    cp local-ca.crt /usr/local/share/ca-certificates
    update-ca-certificates
    
  • Java hat ein eigenes Dateiformat jks (java keystore), das mit dem Programm keytool verwaltet werden kann.
    • In Windows kann Java direkt den Windows Cert Store verwenden, dazu muss die VM Option: -Djavax.net.ssl.trustStoreType=Windows-ROOT angegeben werden. Ansonsten muss der Pfad zu einem jks angegeben sein.
    • In Linux wird mit ca-certificates-java automatisch beim Ausführen von update-ca-certificates ein jks mit allen system-weiten Root-Zertifikate erstellt. Dieses liegt hier: /etc/ssl/certs/java/cacerts
    • der JKS ist immer mit einem Passwort geschützt, standardmässig mit: changeit

DB Clients

  • SAP HANA Client Interface Programming Reference
  • Windows
    • hdbcli: verwendet standardmässig automatisch den Windows Store
    • jdbc: falls -Djavax.net.ssl.trustStoreType=Windows-ROOT ebenfalls den Windows Store
      • DBeaver: verwendet standardmässig den Windows Store
      • PyCharm: verwendet grundsätzlich auch den Windows Store, allerdings läuft jede Database Connection in einer eigenen JAVA VM, dort wird der Windows Store nicht verwerwendet. Windows - Jetbrains Data Source Driver Dialog mit VM Option
  • Linux
    • hdbcli: dem dbapi.connect() muss das Argument sslTrustStore = '/etc/ssl/certs/ca-certificates.crt' mitgegeben werden.
      • sqlalchemy: Connection String muss wie folgt erweiter werden&sslTrustStore=/etc/ssl/certs/ca-certificates.crt
      • Platformunabhängiger Code kann beispielsweise so aussehen:
        from sys import platform
        if platform.startswith("linux"):
          # for hdbcli
          sslTrustStore = '/etc/ssl/certs/ca-certificates.crt'
          # for sqlalchemy
          conn_str_hana = 'hana://DB_USER:DB_PASSWORD@DB_ADDRESS:/?encrypt=true&sslTrustStore=/etc/ssl/certs/ca-certificates.crt'
        end
        
    • jdbc:
      • DBeaver: verwende ich nicht auf Linux.
      • PyCharm: trust Store von Linux muss angegeben werden: trustStore /etc/ssl/certs/java/cacerts Linux - Jetbrains Data Source Driver Dialog mit Properties

SAP HANA und Zertifikate

HANA hat standardmässig selbstsignierte Zertifikate. Das aktuelle public Zertifikat einer HANA DB kann wie folgt abgerufen werden:

</dev/null openssl s_client -connect db.sap.hana.com:12345 | openssl x509 > db.sap.hana.com:12345.pem

# to display the cert
openssl x509 -in db.sap.hana.com:12345.pem -text -noout
# or display the fingerprint
openssl x509 -in db.sap.hana.com:12345.pem -fingerprint -sha256

Soll das self-signed Cert in einen jks importiert werden:

# contains also keytool
sudo apt install default-jdk-headless

keytool -importcert -alias 'db.sap.hana.com:12345' -file "db.sap.hana.com.pem" -keystore my_certs.jks

# display all keys inside a jks
keytool -list -keystore my_certs.jks -v -storepass changeit

Insofern das Cert vorliegt, muss bei der Connection nur die Option encrypt=True gesetzt werden und der Zugriff erfolgt verschlüsselt via verifizierten Host.

Andere Certs

# download SMTP certs from server
openssl s_client -starttls smtp -connect xxx.com:25 -showcerts </dev/null > chain.pem