Aktivasi Akses HTTPS Nexus (SSL)

Sebelumnya saya sudah menunjukkan langkah-langkah instalasi Nexus pada tutorial “Instalasi Nexus di Ubuntu 22.04“. Namun jika diperhatikan webui Nexus Repository Manager masih menggunakan plain HTTP connector tanpa enkripsi apapun sehingga cukup beresiko jika pengguna Nexus menggunakan wifi publik, terutama apabila Nexus tersebut digunakan sebagai repository private perusahaan.

Untuk mengatasi celah tersebut, berikut adalah langkah-langkah untuk melakukan aktivasi akses HTTPS pada webui Nexus Repository Manager:

Sebelum melakukan proses aktivasi, pastikan sudah mengikuti tutorial instalasi pada blog ini dan sudah bisa diakses webuinya. Selain itu, aktivasi HTTPS ini membutuhkan SSL certificate sehingga pastikan ada SSL certificate yang masih aktif, lalu bisa disiapkan file-file berikut dari provider SSL dan salin ke server Nexus:

  • Certificate file (.crt), nama file yang digunakan pada tutorial ini adalah commercial.crt
  • Private key file (.key), nama file yang digunakan pada tutorial ini adalah commercial.key
  • Root CA + intermediate certificate file, nama file yang digunakan pada tutorial ini adalah ca_bundle.crt

Jika tidak ada SSL certificate yang bersifat commercial atau berbayar, kalian juga bisa menggunakan self signed SSL yang di generate menggunakan tools seperti openssl dan sejenisnya. Cara generate self signed SSL bisa dilihat pada banyak tutorial yang ada di Google.

SSL certificate yang digunakan disini mencakup nama “nexus.raihan519.net“, sehingga supaya benar-benar secure webui Nexus Repository Manager harus diakses menggunakan nama tersebut. Sebelum melangkah lebih lanjut, sebaiknya tambahkan nama yang digunakan pada SSL kalian ke server DNS yang digunakan oleh komputer klien Nexus:

Langkah 1: Convert SSL Certificate ke Format Java

  • Pastikan package openssl sudah terinstal
  • File pendukung SSL certificate sudah disalin ke direktori /tmp
  • Generate SSL certificate dengan ekstensi p12 dan masukan password baru untuk mengakses certificate:
    # cd /tmp
    # openssl pkcs12 -export -in commercial.crt -inkey commercial.key -certfile ca_bundle.crt -out commercial.p12
    Enter Export Password: (Masukan password)
    Verifying - Enter Export Password: (Masukan password)
    # ls -1
    ca_bundle.crt
    commercial.crt
    commercial.key
    commercial.p12
  • Generate SSL certificate untuk Java dari file p12 dan masukan passwordnya:
    # keytool -importkeystore -srckeystore commercial.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype JKS
    Importing keystore commercial.p12 to keystore.jks...
    Enter destination keystore password: (Masukan password untuk file SSL certificate java)
    Re-enter new password: (Masukan password)
    Enter source keystore password: (Masukan password)
    Entry for alias 1 successfully imported.
    Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
    # ls -1
    ca_bundle.crt
    commercial.crt
    commercial.key
    commercial.p12
    keystore.jks

Langkah 2: Enable HTTPS Connector

  • Salin file konfigurasi default Nexus ke work directory Nexus:
    # cp /opt/nexus/etc/nexus-default.properties /opt/sonatype-work/nexus3/etc/nexus.properties
  • Edit file /opt/sonatype-work/nexus3/etc/nexus.properties:
    • Tambahkan baris berikut dibawah application-port dan sesuaikan port HTTPS (Saya menggunakan port 8443):
      application-port-ssl=8443
    • Sesuaikan baris nexus-args, tambahkan “,${jetty.etc}/jetty-https.xml” dibelakang argumen HTTP. Berikut contohnya setelah disesuaikan:
      nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
    • Tambahkan baris berikut di bagian paling bawah:
      # SSL
      ssl.etc=${karaf.data}/etc/ssl
  • Edit file /opt/nexus/etc/jetty/jetty-https.xml
    • Sesuaikan baris KeyStorePassword, KeyManagerPassword & TrustStorePassword dengan password SSL certificate Java. Berikut contohnya setelah disesuaikan:
      <Set name="KeyStorePassword">Secret123!</Set>
      <Set name="KeyManagerPassword">Secret123!</Set>
      <Set name="TrustStorePassword">Secret123!</Set>
    • Tambahkan baris berikut diatas <Set name=”KeyStorePath”><Property name=”ssl.etc”/>/keystore.jks</Set>:
      <Set name="certAlias">jetty</Set>
  • Buat direktori ssl baru di work directory Nexus:
    # mkdir -p /opt/sonatype-work/nexus3/etc/ssl
  • Salin file SSL certificate Java ke direktori ssl Nexus:
    # cp /tmp/keystore.jks /opt/sonatype-work/nexus3/etc/ssl/
  • Restart service Nexus:
    # systemctl restart nexus
  • Tunggu sekitar 2 menit sampai semua modul Nexus running lalu cek menggunakan netstat untuk memastikan HTTPS port Nexus sudah aktif:
    # netstat -tlpN --numeric-ports
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
    tcp 0 0 localhost:35419 0.0.0.0:* LISTEN 8265/java 
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd: /usr/sbi 
    tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 8265/java 
    tcp 0 0 localhost:53 0.0.0.0:* LISTEN 746/systemd-resolve 
    tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 8265/java

Testing:

  • Akses webui Nexus Repository Manager melalui web browser menggunakan URL HTTPS dan port HTTPS yang sudah didefinisikan pada file konfigurasi:

Opsional: Disable HTTP Connector

Kalian juga bisa disable HTTP connector Nexus sehingga webui plain HTTP yang kurang secure tidak bisa diakses. Berikut adalah langkah-langkah untuk disable HTTP connector Nexus:

  • Edit file /opt/sonatype-work/nexus3/etc/nexus.properties:
    • Sesuaikan baris nexus-args, hapus “${jetty.etc}/jetty-http.xml,“. Berikut contohnya setelah disesuaikan:
      nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
  • Restart service Nexus:
    # systemctl restart nexus
  • Tunggu sekitar 2 menit sampai semua modul Nexus running lalu cek menggunakan netstat untuk memastikan HTTP port Nexus sudah tidak ada:
    # netstat -tlpN --numeric-ports
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd: /usr/sbi 
    tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 9015/java 
    tcp 0 0 localhost:53 0.0.0.0:* LISTEN 746/systemd-resolve 
    tcp 0 0 localhost:33861 0.0.0.0:* LISTEN 9015/java

Leave a Reply

Your email address will not be published.