Instalasi EJBCA 6.2.0 pada JBoss AS 7.1.1 di Ubuntu 16.04

Hallo, pada postingan pertama kali ini saya coba membahas tentang cara melakukan instalasi EJBCA 6.2.0 pada JBoss AS 7.1.1 di Ubuntu 16.04

Spek Server

  1. RAM = 6 GB.
  2. CPUs = 6.
  3. Hard disk = 50 GB.

*Server yang saya gunakan ini merupakan sebuah Mesin Virtual

Alat & Bahan

  1. Ubuntu Server 16.04.1 LTS 64-Bit (Xenial Xerus) → Download
  2. JBoss AS 7.1.1 Final → Download
  3. EJBCA 6.2.0 → Download
  4. MariaDB 10.1 (Stable) → Cara Install
  5. MariaDB Java Client 1.1.9 → Download

Tahap Awal

Pengaturan FQDN

  1. Pertama kali yang kita dilakukan adalah Setting FQDN-nya terlebih dahulu, caranya:
     sudo vi /etc/hosts

    Setting IP, Nama Domain dan nama Host

Konfigurasi Firewall

EJBCA menggunakan port 8080, 8442, 8443 untuk servis CA. Yang lainnya merupakan port internal (3306 untuk MySQL, 9990 untuk JBoss Admin, dll). Kita tidak perlu mengubah port tersebut pada aplikasi EJBCAnya langsung.

jika kita mau menggunakan port standar yang digunakan WEB, silahkan atur Port Forwarding pada iptables. kita bisa melakukannya dengan cara:

sudo vi /etc/iptables.rules

kemudian masukkan:

### Start iptables ###

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i ens32 -p tcp –dport 80 -j MARK –set-mark 0x64
-A PREROUTING -i ens32 -p tcp –dport 442 -j MARK –set-mark 0x65
-A PREROUTING -i ens32 -p tcp –dport 443 -j MARK –set-mark 0x66
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i ens32 -p tcp –dport 80 -m mark –mark 0x64 -j DNAT –to-destination :8080
-A PREROUTING -i ens32 -p tcp –dport 442 -m mark –mark 0x65 -j DNAT –to-destination :8442
-A PREROUTING -i ens32 -p tcp –dport 443 -m mark –mark 0x66 -j DNAT –to-destination :8443
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i ens32 -m state –state NEW -m tcp -p tcp –dport 8080 -m mark –mark 0x64 -j ACCEPT
-A INPUT -i ens32 -m state –state NEW -m tcp -p tcp –dport 8442 -m mark –mark 0x65 -j ACCEPT
-A INPUT -i ens32 -m state –state NEW -m tcp -p tcp –dport 8443 -m mark –mark 0x66 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 442 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

### End iptables ###

Agar perintah tersebut langsung berjalan pada saat kita merestart server, maka kita perlu memasukkannya ke dalam rc.local. Caranya:

sudo vi /etc/rc.local

kemudian masukkan ini sebelum exit 0:

iptables-restore < /etc/iptables.rules

Restart Server dan iptables tersebut otomatis akan aktif.

Instalasi Beberapa Paket

Seperti namanya EJBCA (Enterprise Java Bean Certification Authority), maka kita membutuhkan java agar software ini dapat running. Versi OpenJDK yang harus diinstal adalah versi 7. Berhubung saya menggunakan Ubuntu 16.04 dan versi OpenJDK yang tersedia adalah versi 8 dan 9, maka perlu dilakukan penambahan repository untuk melakukan instalasi OpenJDK 7. Caranya:

sudo add-apt-repository ppa:openjdk-r/ppa
Penambahan Repositori

Setelah melakukan penambahan repositori, lakukan perintah sudo apt-get update untuk memperbarui repositori yang baru saja ditambahkan tadi. Kalau sudah selesai, kita akan melakukan instalasi paket ant, ant-optional, unzip dan openjdk-7-jdk. Caranya:

sudo apt-get update
sudo apt-get install ant ant-optional unzip openjdk-7-jdk
instalasi ant ant-optional unzip openjdk -7-jdk

Setelah melakukan instalasi openjdk 7 dan beberapa paket lainnya, ada baiknya memeriksa versi java terlebih dahulu apakah sudah sesuai dengan yang kita inginkan atau belum. Caranya:

java -version
Cara memeriksa versi java yang terpasang

Dari hasil di atas didapatkan kalau versi yang terinstal adalah versi 8. untuk itu kita harus mengubahnya menjadi versi 7. Caranya:

sudo update-alternatives --config java
Cara mengubah versi java dan memilih sesuai dengan yang kita inginkan

Pilih java-7-openjdk sesuai dengan persyaratan yang kita butuhkan. Untuk itu pilih angka “1” kemudian enter.

Untuk memastikan kembali kalau versi Java sudah benar sesuai dengan yang diinginkan, jalankan kembali perintah java -version dan pastikan hasilnya seperti gambar yang tertera berikut:

Sudah menggunakan java versi 7 sesuai yang diperlukan

Instalasi dan Konfigurasi MariaDB

Tahap berikutnya kita harus melakukan instalasi Database kemudian konfigurasi. konfigurasi yang saya lakukan disini hanyalah konfigurasi biasa tanpa Security yang cukup baik (hanya untuk keperluan percobaan). Untuk kalian yang ingin mengimplementasikannya di production, pastikan mengamankan direktori mysql dan meng-update /etc/mysql/my.cnf sebelum menjalankan service database. Konfigurasi ini juga menggunakan utf-8 encoding yang menjadi syarat dari EJBCA. Mari kita mulai instalasinya terlebih dahulu:

Untuk melakukan instalasi mariaDB 10.1 (stable) pada Ubuntu Server 16.04. Tambahkan dulu repositorinya dengan cara:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.biz.net.id/repo/10.1/ubuntu xenial main'
Penambahan Repo Mariadb 10.1

Setelah itu update paket ubuntu dan install MariaDB 10.1. Caranya:

sudo apt-get update
sudo apt-get install mariadb-server
instalasi mariadb 10.1

Setelah MariaDB selesai terinstal, tahap selanjutnya adalah mengubah beberapa konfigurasi yang ada pada my.cnf. Salah satunya adalah menambahkan binlog_format=row. Kalau menggunakan MariaDB, kemungkinan servicenya menolak untuk berjalan karena InnoDB tidak bisa memproses log binary-nya. Tambahkan binlog_format=row seperti konfigurasi di bawah untuk memecahkan masalah tersebut. Tambahkan juga beberapa item lain yang belum ada di my.cnf kalian ya.

sudo vi /etc/mysql/my.cnf
[client]
 port                    = 3306
 socket                  = /var/run/mysqld/mysqld.sock

[mysqld]
 user                    = mysql
 socket                  = /var/run/mysqld/mysqld.sock
 port                    = 3306
 basedir                 = /usr
 datadir                 = /var/lib/mysql
 tmpdir                  = /tmp
 lc_messages_dir         = /usr/share/mysql
 lc_messages             = en_US
 skip-external-locking

#UTF-8
 character-set-server    = utf8
 collation-server        = utf8_unicode_ci
 init-connect            = 'SET NAMES utf8'

#Binary Logging
 log_bin                 = /var/log/mysql/mariadb-bin
 log_bin_index           = /var/log/mysql/mariadb-bin.index
 binlog_format           = ROW
 expire_logs_days        = 10
 max_binlog_size         = 100M
 server-id               = 1
 slow_query_log_file     = /var/log/mysql/mariadb-slow.log
 long_query_time         = 10


Setelah beres, jangan lupa untuk mengubah kepemilikan my.cnf tersebut menjadi milik mysql. caranya:

sudo chown mysql:mysql /etc/mysql/my.cnf

Pada konfigurasi my.cnf di atas, kita memasukkan lokasi untuk meletakkan log. Untuk mengamankan log tersebut (karena log tersebut mengandung data sertifikat kita), maka kita harus mengatur izin yang terbatas soal siapa yang bisa mengaksesnya. caranya:

chown -R mysql:mysql /var/log/mysql
chmod -R 750 /var/log/mysql/

Setelah MariaDB terinstall dan konfigurasi dilakukan, tahap selanjutnya adalah membuat database untuk EJBCA dan juga sebuah user untuk mengakses database EJBCA tersebut (jangan menggunakan user root). Caranya:

mysql -u root -p
create database <nama_db>;
grant all privileges on <nama_db>.* to '<user>'@'<ip>' identified by '<password>';
flush privileges;
exit
Create db untuk EJBCA dan user untuk mengaksesnya

kalau sudah, lakukan verifikasi dengan cara login dengan menggunakan user yang baru saja kita buat tadi dan test aksesnya. Caranya:

mysql -u <user_db> -p
use <db_ejbca>;
show grants for '<user_db>@'<ip>';
exit
test user yang baru dibuat untuk database EJBCA

Nanti, kita akan mengganti permission pada database EJBCA tadi untuk membuat akses user tersebut lebih terbatas. Pada bagian akhir, restart service database tersebut dengan perintah:

sudo service mysql restart

Membuat Struktur Direktori

Sekarang kita akan membuat struktur direktori dari aplikasi itu sendiri. Saya memutuskan untuk meletakkan aplikasi-aplikasi yang saya butuhkan pada /opt. Secara default, Semua dokumentasi EJBCA mengasumsikan kita melakukan instalasi pada home direktori. Namun saya lebih senang untuk menggunakan simbolik link agar lebih mudah.

  • /opt saya gunakan untuk meletakkan semua file sehingga kita bisa dengan mudah menghapusnya dan memulai lagi dari awal.
  • Download Jboss dan EJBCA dengan wget (link ada di “alat & bahan”) dan letakkan pada /opt.
wget jboss
wget ejbca

Setelah semua file terdownload (dalam bentuk zip), lalu ekstrak dan buat beberapa link sebagai shortcut untuk menuju folder tersebut. caranya:

sudo unzip jboss-as-7.1.1.Final.zip
sudo unzip ejbca_ce_6_2_0.zip
sudo ln -s /opt/ejbca_ce_6_2_0 ejbca
sudo ln -s /opt/jboss-as-7.1.1.Final jboss
Unzip File
Membuat Link

Menambahkan Akun User untuk OS

Untuk menjalankan service Jboss dan EJBCA ini, ada baiknya menggunakan user lain (bukan user biasa). Saya kali ini akan membuat user dengan nama jboss. Hal ini penting karena jboss punya /bin/bash untuk shell dan /opt/jboss sebagai home direktori:

sudo adduser jboss
penambahan user jboss

Selanjutnya kita akan menentukan JAVA_HOME, APPSRV_HOME, EJBCA_HOME dan JBOSS_HOME pada .bashrc yang terletak pada direktori home dari Jboss. Caranya:

su - jboss
cd /home/jboss
vi .bashrc

dan tambahkan file berikut

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

export APPSRV_HOME=/opt/jboss
export PATH=$PATH:$JBOSS_HOME/bin

export EJBCA_HOME=/opt/ejbca
export PATH=$PATH:$EJBCA_HOME/bin

export JBOSS_HOME=/opt/jboss
export PATH=$PATH:$JBOSS_HOME/bin

  • pada tahap ini server sudah terbangun, MariaDB sudah berjalan, dan kita siap untuk melakukan instalasi Jboss. Ada Baiknya untuk mengambil snapshot pada tahap ini (kalau kalian menggunakan VM).

Instalasi JBoss

Sekarang adalah saatnya melakukan instalasi JBoss. Kita tidak akan mengkonfigurasi setiap detailnya (tanpa email, logging default), namun kita akan melakukan cukup perubahan untuk Jboss ini dapat berjalan sesuai dengan yang dibutuhkan untuk menginstall EJBCA.

Konfigurasi JBoss Instance (Standalone)

Pertama, kita akan mengkonfigurasi Instance Jboss yang nanti akan digunakan oleh EJBCA. Namanya “Standalone“,  dan hadir secara default dalam JBoss 7.1.1.

Pada direktori /opt/jboss/bin terdapat sebuah script yang bernama standalone.sh yang merupakan titik utama dari Jboss. Script ini memberi referensi pada sebuah file konfigurasi yang terletak pada folder yang sama bernama standalone.conf. Kita tidak akan memodifikasi script startup-nya, tapi kita perlu untuk memodifikasi file konfigurasinya.

Sebagai langkah awal, kita akan mem-backup file konfigurasi defaultnya terlebih dahulu. Caranya:

sudo -s
cd /opt/jboss/bin
cp standalone.conf standalone.conf.bak

File konfigurasi tersebut juga berisi satu set option JVM yang nantinya akan kita ubah sedikit. Ini bukanlah perubahan yang wajib, tapi perubahan tersebut dapat mengalokasikan memori lebih pada JVM.

  • Penting: File yang saya modifikasi di sini saya ikuti dari sini.
  • Ada beberapa entri yang dinonaktifkan, namun yang penting di sini adalah JAVA_HOME dan JAVA_OPTS.
vi standalone.conf

sesuaikan entri berikut:

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"

Menambahkan Export Class pada JBoss

Sekarang kita akan memulai tweak pada konfigurasi JBoss. Kita akan mulai dengan mengaktifkan beberapa fungsi keamanan tertentu yang dibutuhkan oleh EJBCA. Caranya:

cd /opt/jboss/modules/sun/jdk/main
vi module.xml

tambahkan beberapa entry berikut pada bagian “System Export”:

<path name="sun/security/x509"/>
<path name="sun/security/pkcs11"/>
<path name="sun/security/pkcs11/wrapper"/>
<path name="sun/security/action"/>
Penambahan entry pada System Export

Menambahkan MariaDB Java Client

JBoss merupakan sebuah aplikasi yang running dengan java. Agar JBoss dapat “ngobrol” dengan MariaDB maka kita akan membutuhkan sebuah penghubung bernama MariaDB Java Client. Untuk itu tahap pertama yang harus dilakukan adalah download MariaDB Java Client tersebut, link sudah saya sertakan di “alat dan bahan”. (versi yang saya gunakan adalah Mariadb-java-client-1.1.9)

Setelah itu buat sebuah direktori untuk meletakkan file tersebut dalam JBoss. Caranya:

cd /opt/jboss/modules/org
mkdir -p mariadb/main
cd mariadb/main
cp /opt/mariadb-java-client-1.1.9.jar /opt/jboss/modules/org/mariadb/main

Setelah selesai, kita masih perlu membuat 2 file lagi dan meletakkannya pada lokasi yang sama dengan mariadb-java-client-1.1.9.jar yaitu mariadb-java-client-1.1.9.jar.index dan module.xml. Caranya:

vi mariadb-java-client-1.1.9.jar.index

isinya:

org/mariadb/jdbc/internal/common/packet
META-INF/maven
org/mariadb/jdbc/internal/common/query/parameters
org/mariadb/jdbc/internal/mysql/packet/commands
org
META-INF
org/mariadb/jdbc/internal/common/packet/commands
META-INF/maven/org.mariadb.jdbc/mariadb-java-client
META-INF/maven/org.mariadb.jdbc
org/mariadb/jdbc/internal/common/queryresults
org/mariadb/jdbc/internal
org/mariadb/jdbc/internal/mysql
org/mariadb/jdbc/internal/common/query
org/mariadb
org/mariadb/jdbc/internal/mysql/packet
META-INF/services
org/mariadb/jdbc
org/mariadb/jdbc/internal/common
org/mariadb/jdbc/internal/common/packet/buffer

vi module.xml

isinya:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.mariadb">
  <resources>
    <resource-root path="mariadb-java-client-1.1.9.jar"/>
   </resources>
   <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
   </dependencies>
</module>

Jadi sekarang dalam folder /opt/jboss/modules/org/mariadb/main terdapat 3 file seperti gambar di bawah:

3 folder yang berada pada mariadb/main

Starting JBoss

Beberapa tweak harus kita lakukan setelah JBoss berjalan. Karena beberapa perintah di atas ada yang dijalankan sebagai root, kita akan membuat user jboss menjadi owner dari folder jboss yang sudah kita extract.

  • Jangan jalankan perintah “chown -R root:root /opt/jboss” – kita ingin agar root tetap menjadi pemilik dari Symbolic link.

Maka jalankan perintah berikut:

sudo chown -R jboss:jboss /opt/jboss-as-7.1.1.Final

Sekarang dengan user jboss, kita akan mengeksekusi file standalone.sh yang berada pada folder jboss. Langkah-langkahnya adalah sebagai berikut:

su - jboss
cd /opt/jboss/bin
nohup ./standalone.sh -b 0.0.0.0 -bmanagement=0.0.0.0 &
  • “&” digunakan agar jboss tetap berjalan saat kita keluar dari terminal.
  • “-b” adalah opsi untuk menentukan jboss.bind.address.
  • “0.0.0.0” berarti dapat diakses dari IP manapun.

dan untuk melihat lognya, maka jalankan perintah berikut:

tail -100f nohup.out

maka keluarannya akan seperti berikut:

log yang keluar setelah menjalankan service JBoss

dari log diatas dapat dihasilkan beberapa poin, yaitu:

  • JBoss Admin Page dapat diakses dari IP manapun melalui browser.
  • alamat default URL untuk JBoss Admin tersebut adalah http://<ip atau domain>:9990/console/App.html
  • Ketika kita melihat proses ini pada log  → “started xxx of xxx services”  , maka JBoss sudah berjalan.

Menambahkan Data Source

Sekarang servis JBoss sudah berjalan, kita bisa menambahkan datasource. Kita akan melakukan ini melalui CLI-nya JBoss, yang akan mengupdate konfigurasi yang berada pada instance Standalone. Sebelum melakukan perubahan maka ada baiknya kita membackup konfigurasi awal terlebih dahulu. Caranya (masih dengan user jboss):

cd /opt/jboss/standalone/configuration
cp standalone.xml standalone.xml.bak

Sekarang kita akan menuju JBoss CLI dan melakukan beberapa perubahan. Caranya:

cd /opt/jboss/bin
sh jboss-cli.sh
connect

Lalu jalankan perintah berikut:

/subsystem=datasources/jdbc-driver=org.mariadb.jdbc.Driver:add(driver-name=org.mariadb.jdbc.Driver,driver-module-name=org.mariadb,driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource)
:reload
Exit

Setelah perintah tersebut dieksekusi maka hasil keluarannya adalah “Success” (seperti pada gambar di bawah).

Mendaftarkan driver MariaDB pada Jboss

Hal yang kita lakukan pada CLI ini mendefinisikan driver mariadb yang ada pada /opt/jboss/standalone/configuration/standalone.xml, kemudian me-reload JBoss.

Hasilnya akan terlihat pada standalone.xml seperti gambar berikut:

Hasil dari penambahan driver yang dilakukan pada JBoss CLI

Sebagai bukti lagi kalau driver tersebut sudah masuk, kita akan melihat pada log yang tertera di file nohup.out yang ada pada folder /opt/jboss/bin. Namun sebelumnya kita harus me-restart service jboss yang sedang berjalan. Caranya:

cd /opt/jboss/bin
ps -ax | grep jboss
kill <nomor pada ps-ax>
nohup ./standalone.sh -b 0.0.0.0 -bmanagement=0.0.0.0 &
tail -100f nohup.out

Maka akan tampil hasil seperti berikut kalau sukses

MariaDB sudah ada

Menghapus Datasource H2 dan Drivernya

Secara default, instance standalone didefinisikan dengan sebuah h2/hsqldb database connector dan sebuah database contoh. Kita tidak membutuhkan ini, jadi kita akan memodifikasi kembali standalone.xml dan menonaktifkannya.

  • Ingat bahwa database instance H2 adalah database yang bersifat sementara di memory yang tidak menyimpan data dalam disk, tidak menyediakan koneksi TCP/IP eksternal dan dapat diabaikan saja.
cd /opt/jboss/standalone/configuration
vi standalone.xml

Buang bagian berikut:

<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                     <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                     <driver>h2</driver>
                     <security>
                         <user-name>sa</user-name>
                         <password>sa</password>
                     </security>
                 </datasource>
Buang bagian exampleDS

dan juga buang bagian berikut:

 <driver name="h2" module="com.h2database.h2"> 
                     <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                 </driver>
buang h2 driver

setelah itu, kita akan kembali me-restart JBoss dan melihat log yang ada pada nohup.out. apabila kalian perhatikan maka sudah tidak ada lagi

[org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool — 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)

dan yang ada hanya

[org.jboss.as.connector.subsystems.datasources] (management-handler-thread – 4) JBAS010404: Deploying non-JDBC-compliant driver class org.mariadb.jdbc.Driver (version 1.1)

Menambahkan Datasource untuk database EJBCA

Setelah tadi kita menghapus datasource untuk H2, sekarang kita akan menambahkan datasource untuk database EJBCA. Fungsinya disini nanti adalah ketika kita mau melakukan instalasi EJBCA, maka jboss sudah mengenali nama database yang akan digunakan untuk menyimpan tabel EJBCA serta user dan password untuk mengakses database tersebut. Caranya:

cd /opt/jboss/bin
sh jboss-cli.sh
connect

lalu tambahkan file berikut:

data-source add --name=ejbcads --driver-name="org.mariadb.jdbc.Driver" --connection-url="jdbc:mysql://127.0.0.1:3306/<nama_db>" --jndi-name="java:/EjbcaDS" --use-ccm=true --driver-class="org.mariadb.jdbc.Driver" --user-name="<nama_username>" --password="<password>" --validate-on-match=true --background-validation=false --prepared-statements-cache-size=50 --share-prepared-statements=true --min-pool-size=5 --max-pool-size=150 --pool-prefill=true --transaction-isolation=TRANSACTION_READ_COMMITTED --check-valid-connection-sql="select 1;"
  • Ubah yang ada di dalam tanda <> sesuai dengan yang kita punya
penambahan data source untuk EJBCA

Setelah ditambahkan maka datasource tersebut akan masuk ke dalam standalone.xml. Untuk membuktikannya, maka lakukan:

vi /opt/jboss/standalone/configuration/standalone.xml

Cari dan temukan baris berikut:

datasource yang berhasil ditambahkan

Konfigurasi User Admin untuk JBoss Web

apabila kita mengakses console JBoss via web pada tahap ini melalui http://<ip atau domain>:9990 maka yang tampil adalah seperti berikut:

Jboss console via web tapi masih ada error

Hal itu disebabkan oleh belum adanya admin User yang dibuat untuk mengakses console tersebut. Untuk itu kita perlu membuatnya. Caranya:

cd /opt/jboss/bin
sh add-user.sh

Maka akan muncul pertanyaan seperti berikut:

 What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
 (a): a

Enter the details of the new user to add.
 Realm (ManagementRealm) :
 Username : xxxx
 Password :
 Re-enter Password :
 About to add user 'xxxx' for realm 'ManagementRealm'
 Is this correct yes/no? yes
 Added user 'xxxx' to file '/opt/jboss-as-7.1.1.Final/standalone/configuration/mgmt-users.properties'
 Added user 'xxxx' to file '/opt/jboss-as-7.1.1.Final/domain/configuration/mgmt-users.properties'
  • “What type of user do you wish to add?” → isi dengan “a”
  • “Realm” → enter saja.
  • “username” → Isi dengan username yang kalian mau.
  • “Password” → Isi dengan password yang kalian mau.
  • “Re-Enter Password” → Ulangi kembali dengan password yang sama.
  • “yes/no” → pilih “yes”

Pada saat ini seharusnya kita sudah bisa mengakses interface dari JBoss Web Console dan mengganti beberapa item. Namun pada saat ini kita belum perlu untuk mengganti apapun:

  • Ini adalah user spesifik untuk JBoss yang tidak digunakan dimanapun.
  • Ini adalah tahapan yang bagus untuk mengambil snapshot vm.

Sekarang mari kita coba user tersebut. caranya masuk ke browser dan ketikkan http://<ip atau domain>:9990/console/App.html. Maka akan muncul tampilan seperti berikut:

JBoss web console

Masukkan username dan password sesuai dengan yang baru saja kita input. Apabila benar maka akan muncul tampilan seperti berikut:

Web Console JBoss

Instalasi EJBCA

Sebelum kita melanjutkan, kalian perlu tahu bahwa konfigurasi awal EJBCA dapat dibagi kedalam beberapa bagian yaitu:

  • file-file .properties yang ada dalam folder /opt/ejbca/conf
  • file keystore awal yang terdapat pada folder /opt/ejbca/p12
  • config JBoss di standalone.xml

Kalian juga perlu tahu bahwa beberapa aturan umum untuk bekerja dengan konfigurasi EJBCA, diantaranya:

  • Pertama, anggap bahwa tidak akan ada konfigurasi yang berubah selama proses deploy dan hanya file ejbca.ear yang tersentuh dalam aksi kali ini.
  • Database mariaDB akan terisi secara otomatis saat pertama kali kita melakukan proses deploy, tapi sebaliknya tidak akan tersentuh oleh script ant apapun.
  • Database tidak akan menyimpan data konfigurasi apapun, tetapi akan berpengaruh jika ada perubahan pada konfigurasi yang kita buat.
  • Perintah ant.install mencoba untuk membuat file keystore setiap kali perintah tersebut dijalankan, meskipun file-file tersebut ada.
  • porsi dari standalone.xml dapat diubah baik oleh ant build atau ant install, tetapi hal tersebut hanya menanggapi perubahan yang kita buat pada file *.properties.
  • Setelah instalasi awal selesai, ant tidak akan mengubah standalone.xml kecuali  kita telah mengubah sebuah file .properties.

File Properties pada EJBCA

EJBCA menggunakan text biasa pada file “.properties” untuk konfigurasi utamanya. File-file ini akan menjadi rujukan ketika kita meng-compile ejbca.ear dengan ant, dan tidak menjadi referensi oleh aplikasi yang sedang berjalan.

  • file install.properties hanya digunakan ketika menjalankan perintah ant install, dan bukan saat menjalankan ant deploy.
  • Beberapa file sebenarnya berisi paremeter yang menyediakan parsing runtime dari variabel-variabel pada file properties tersebut, tetapi fungsi ini di non-aktifkan secara default.
file properties yang ada di EJBCA

Pertama, EJBCA memiliki beberapa contoh dari semua file properties yang ada pada direktori /opt/ejbca/conf. Yang kita butuhkan adalah:

PropertiesPenjelasan
certstore.propertiesmendefinisikan variabel penyimpanan sertifikat
cesecore.propertiesmendefinisikan variabel core security engine
crlstore.propertiesmendefinisikan variabel penyimpanan CRL
database.propertiesmendefinisikan bagaimana EJBCA akan mengakses database
ejbca.propertiesmendefinisikan variabel basic untuk EJBCA itu sendiri
install.propertiesdigunakan oleh "ant install" selama instalasi
mail.propertiesmendefinisikan bagaiman EJBCA SMTP connector akan berfungsi
ocsp.propertiesmendefinisikan bagaimana OCSP itu akan bekerja
va.propertiesmendefinisikan bagaimana validation authority akan bekerja
va-publisher.propertiesmendefinisikan bagaimana validation authority akan mengakses database
web.propertiesmendefinisikan variabel untuk web interface EJBCA

Ada beberapa file jndi.* dan sebuah file yang disebut extendedkeyusage.properties dalam folder conf tersebut. Mereka dibutuhkan, namun tidak akan diotak-atik lebih jauh, dan bisa diabaikan saja. Ada juga 2 folder lainnya yaitu logdevices dan plugins, yang bisa diabaikan juga.

Pertama, kita akan membuat direktori baru yang disebut /opt/ejbca/conf/sample dan memindahkan semua file .sample ke dalam folder tersebut untuk tujuan backup. Caranya

cd /opt/ejbca/conf
mkdir sample
mv *.sample sample/

lalu kemudian kita akan meng-copy beberapa file yang dibutuhkan ke direktori utamanya. Caranya:

cp sample/certstore.properties.sample certstore.properties
cp sample/cesecore.properties.sample cesecore.properties
cp sample/crlstore.properties.sample crlstore.properties
cp sample/database.properties.sample database.properties
cp sample/ejbca.properties.sample ejbca.properties
cp sample/install.properties.sample install.properties
cp sample/mail.properties.sample mail.properties
cp sample/web.properties.sample web.properties
File properties yang kita butuhkan

Kita akan mengkonfigurasi file-file ini kemudian menguji coba instalasinya sebelum melakukan tindakan. Dengan hanya file di atas tersebut maka EJBCA akan beroperasi tanpa Validation Authority.

mari kita mulai:

certstore.properties

####Start certstore.properties ###

# ———— RFC 4387 Certificate store configuration ———————
certstore.enabled=true

# This is the web directory that the web interface for the cert store will use. 

# This is an unused alternate location
certstore.contextroot=/ejbca/publicweb/certificates

#### End certstore.properties ###

certstore.properties

cesecore.properties

###Start cesecore.properties ###

allow.external-dynamic.configuration=true

# You do not need to configure this password!
#ca.keystorepass=!secret!

#ca.rngalgorithm=SHA1PRNG
ca.serialnumberoctetsize=8

ca.toolateexpiredate=80000000
#ca.toolateexpiredate=2038-01-19 03:14:08+00:00

#ca.doPermitExtractablePrivateKeys=true

#forbidden.characters = \n\r;!\u0000%`?$~
#intresources.preferredlanguage=EN
#intresources.secondarylanguage=SE

#These variables will enable explicit logging. You can turn them off later
securityeventsaudit.implementation.X=org.cesecore.audit.impl.log4j.Log4jDevice
securityeventsaudit.implementation.X=org.cesecore.audit.impl.integrityprotected.IntegrityProtectedDevice

#securityeventsaudit.implementation.0=null
#securityeventsaudit.implementation.1=null

#securityeventsaudit.exporter.X=org.cesecore.audit.impl.AuditExporterDummy (default)
#securityeventsaudit.exporter.X=org.cesecore.audit.impl.AuditExportCsv
#securityeventsaudit.exporter.X=org.cesecore.audit.impl.AuditExporterXml
#securityeventsaudit.deviceproperty.X.key.subkey=value

# More log config below
securityeventsaudit.implementation.0=org.cesecore.audit.impl.log4j.Log4jDevice
securityeventsaudit.implementation.1=org.cesecore.audit.impl.integrityprotected.IntegrityProtectedDevice
securityeventsaudit.exporter.1=org.cesecore.audit.impl.AuditExporterXml

#securityeventsaudit.deviceproperty.1.export.dir=/tmp/
#securityeventsaudit.deviceproperty.1.export.fetchsize=1000
#securityeventsaudit.deviceproperty.1.validate.fetchsize=1000

#ecdsa.implicitlyca.q=883423532389192164791648750360308885314476597252960362792450860609699839
#ecdsa.implicitlyca.a=7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc
#ecdsa.implicitlyca.b=6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a
#ecdsa.implicitlyca.g=020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf
#ecdsa.implicitlyca.n=883423532389192164791648750360308884807550341691627752275345424702807307

### End cesecore.properties ###

cesecore.properties 1
cesecore.properties 2

crlstore.properties

### Start crlstore.properties ###

# This is all very similar to certstore.properties
# ———— RFC 4387 CRL store configuration ———————
crlstore.enabled=true
#crlstore.contextroot=/crls
crlstore.contextroot=/ejbca/publicweb/crls

### End crlstore.properties ###

crlstore.properties

database.properties

### Start database.properties ###

# ————- Database configuration ————————

#This variable is used in our standalone.xml <datasource> stanza
datasource.jndi-name=EjbcaDS

# This is the TYPE of db, not the NAME OF the db
database.name=mysql

# Be sure to use utf-8
database.url=jdbc:mysql://127.0.0.1:3306/ejbcadb?characterEncoding=UTF-8 
database.driver=org.mariadb.jdbc.Driver

database.username=ejbcadbuser

# Change this to your mysql user password:
database.password=pumpkin

### End database.properties ###

database.properties 1
database.properties 2
database.properties 3

ejbca.properties

###Start ejbca.properties ###

# The next two variables are very important…
appserver.home=/opt/jboss
appserver.type=jboss

# Initially, we will set this to false. Once the install is complete, we change
# this to true.
# But DO NOT set it to “ca”!
#ejbca.productionmode=true
ejbca.productionmode=false

allow.external-dynamic.configuration=true

# Don’t set these!
#ca.xkmskeystorepass=
#ca.cmskeystorepass=

approval.defaultrequestvalidity=28800
approval.defaultapprovalvalidity=28800
#approval.excludedClasses=org.ejbca.extra.caservice.ExtRACAServiceWorker
#approval.excludedClasses=org.ejbca.core.protocol.cmp.CmpMessageDispatcherSessionBean
#approval.excludedClasses=org.ejbca.core.protocol.cmp.RevocationMessageHandler
#approval.excludedClasses=

healthcheck.amountfreemem=32
healthcheck.dbquery=Select 1 From CertificateData where fingerprint=’XX’
healthcheck.authorizedips=127.0.0.1
healthcheck.catokensigntest=true
healthcheck.publisherconnections=true
#healthcheck.maintenancefile=~/maintenance.properties
#healthcheck.maintenancepropertyname=DOWN_FOR_MAINTENANCE
healthcheck.okmessage=ALLOK
healthcheck.sendservererror=true
#healthcheck.customerrormessage=EJBCANOTOK

# It’s important to change this to 8:
ejbca.passwordlogrounds=8

#——————- CLI settings ————-
ejbca.cli.defaultusername=apaaja
ejbca.cli.defaultpassword=bebaspokoknya

### End ejbca.properties ###

ejbca.properties 1
ejbca.properties 2
ejbca.properties 3
ejbca.properties 4
ejbca .properties 5

install.properties

### This file is essentially an “answer file” used when running the “ant install” command.
### The variables listed here are *not* used by ejbca while it is running.

### Start install.properties ###

# In every case that “CA” is mentioned in this file, it refers to the “management” CA ONLY.

# This will be the initial name of the management CA instance
# ejbca will use this for administration purpose, not your production CAs
# Note that the CN given here is NOT the FQDN of your CA!
# Why does this matter? This certificate will be temporarily installed
# on your browser as a trusted root CA, but will not be communicated
# with.
ca.name=mgmtca
ca.dn=CN=mgmtca,O=Your Company,C=US
ca.tokentype=soft
ca.tokenpassword=null

# This is the path to a “catoken.properties” file that will be created when ‘ant
# install’ is run. It will contain encryption parameters used by the mgmt CA.
# It is only used with hard encryption tokens, and can be ignored if your certs
# will be stored in the ejbca database (which is were we will be putting them.)

#ca.tokenproperties=/opt/ejbca/conf/catoken.properties

# THIS IS IMPORTANT
# You can assume that ejbca cannot use EC algorithms for the management CA.
# This does not mean that ejbca cannot issue certificates that use EC.
# It just means that the management CA will use RSA for internal purposes.
# The reason for this limitation is that the various EC algorithms are
# not equally supported by the various java flavors that could be used.
# More importantly, ejbca does not include any sort of logic to identify
# the version of java you are using to limit or correct your options.
# Choosing an unsupported algorithm here leads to a corrupt installation.
# This can waste a great amount of time, so just avoid EC.
# You can use EC later with the actual production CAs you define.

# Keyspec for RSA keys is size of RSA keys (1024, 2048, 4096, 8192).
ca.keyspec=4096

# The keytype for the administrative CA, can be RSA, ECDSA or DSA
ca.keytype=RSA

# Even though SHA1 is still largely in use as a certificate hashing
# algorithm, I *strongly* suggest that you go with SHA256WithRSA.
# Also, please note that the “with/With” in the hash names is indeed case-sensitive.
# Stay classy, Oracle.

# SHA1WithRSA, SHA1withECDSA, SHA256WithRSA, SHA256withECDSA.
ca.signaturealgorithm=SHA256WithRSA

# I set a CA validity of 10 years (including the leap years, rain man)
ca.validity=3652
ca.policy=null
ca.certificateprofile=ROOTCA

### End install.properties ###

install.properties 1
install.properties 2

web.properties

### Start web.properties ###

# The key to this portion of the config is understanding that this file affects
# the certificate used by the ejbca admin webpage. In install.properties, we
# defined variables for the management CA root certificate. But that certificate
# is not used for session TLS. The management CA issues a separate “server
# certificate” for that purpose that is defined here.

# ———— Web GUI configuration ———————
# Can not be set to false, commented away means that web will be configured.
#web.noconfigure=true

# Can not be set to false, commented away means that web will be configured.
# web.nosslconfigure=true

# You do not need to set this password!
#java.trustpassword=changeit

superadmin.cn=superadmin
superadmin.dn=CN=${superadmin.cn},O=Your Company,C=US

superadmin.password=ejbca

superadmin.batch=true

# You do not need to set this password!
#httpsserver.password=serverpwd

httpsserver.hostname=rootca.domainlo.net

httpsserver.dn=CN=${httpsserver.hostname},O=Your Company,C=US

# This is the port that will host the unencrypted Ejbca Public Web page.
# Note that this will be used the CRL and OSCP URLs, although it will be NATted to port 80 by our firewall rules.

httpserver.pubhttp=8080

# This is the port that will host the encrypted Ejbca Public Web page, *without* client certificate authentication.
httpserver.pubhttps=8442

# This is the port that will host the encrypted Ejbca Public Web page,
# as well as the Administration page. Accessing content hosted on
# this port requires client certificate authentication.

# Note that the Ejbca Public Web page link to the administration
# page will try to include this port in the URL, regardless of any
# port redirection you may be using. This will fixed at the end of
# the how-to.

httpserver.privhttps=8443

# Trying to use port 443 will not work here, as it is a “privileged” port.
#httpserver.external.privhttps=443

#Don’t set these up unless you use an apache proxy for port translation

#httpserver.external.fqdn=
#httpserver.external.fqdn=${httpsserver.hostname}

#httpsserver.bindaddress.pubhttp=0.0.0.0
#httpsserver.bindaddress.pubhttps=0.0.0.0
#httpsserver.bindaddress.privhttps=0.0.0.0

# Who let the Swedes in here?
#web.availablelanguages=EN,DE,ES,FR,IT,JA,PT,SE,UA,ZH,BS

web.availablelanguages=EN,DE,ES,FR,IT,JA,PT,UA,ZH,BS
web.contentencoding=UTF-8

# Well, this doesn’t sound like a good idea.
#hardtoken.diplaysensitiveinfo=true

#web.docbaseuri=disabled
#web.docbaseuri=internal
#web.docbaseuri=http://www.ejbca.org

#web.reqcertindb=true

web.selfreg.enabled=false
web.selfreg.defaultcerttype=1
web.selfreg.certtypes.1.description=User certificate
web.selfreg.certtypes.1.eeprofile=SOMEPROFILE
web.selfreg.certtypes.1.certprofile=ENDUSER
#web.selfreg.certtypes.1.usernamemapping=CN
web.renewalenabled=false
#web.manualclasspathsenabled=true

#web.errorpage.notification=An exception has occurred.
web.errorpage.notification=ZOMG PWND!!111!!!1!!!1

# This setting is good for a lab environment. Don’t use this in production.
web.errorpage.stacktrace=true

#web.enableproxiedauth=true
web.log.adminremoteip=true
#web.log.adminforwardedip=true

#### End web.properties ###

web.properties 1
web.properties 2
web.properties 3
web.properties 4
web.properties 5

Deployment Awal

Sekarang kita sudah punya file properties yang sudah dimodifikasi. sekarang kita bisa memulai untuk melakukan deployment awal dari ejbca ke jboss.

Buka terminal dan lihat log yang terjadi pada console jboss. Caranya:

tail -200f /opt/jboss/bin/nohup.out

user jboss haruslah menjadi pemilik baik direktori jboss ataupun ejbca. sebelum menjalankan deployment awal, ini adalah persyaratan awal untuk meyakinkan bahwa kepemilikannya benar. Caranya:

sudo chown -R jboss:jboss /opt/jboss-as-7.1.1.Final
sudo chown -R jboss:jboss /opt/ejbca_ce_6_2_0
su - jboss
cd /opt/ejbca 
ant deploy
  • selalu jalankan perintah ant dengan user jboss.
  • biasanya kegagalan yang sering terjadi adalah karena ant tidak dieksekusi dengan user jboss tetapi user root.
  • dan juga kalian harus selalu menjalankan ant dari folder /opt/ejbca, tempat dimana build.xml berada. kita bisa saja menggunakan path menuju folder ejbca tersebut ketika mengeksekusi perintah ant, namun lebih mudah apabila kita pindah langsung ke folder /opt/ejbca.
  • dan yang terakhir, JBoss harus terlebih dahulu berjalan sebelum kita menjalankan perintah ant.

Deployment yang kita lakukan menarik informasi dari file konfigurasi, menggunakan informasi tersebut untuk meng-compile file ejbca.ear, kemudian mendorong jboss untuk mendeploy-nya. Karena ini deployment pertama, ant juga melakukan hal berikut:

  • Menambahkan konfigurasi mail ejbca ke file standalone.xml
  • menambahkan ejbca datasource ke file standalone.xml
  • membuat tabel pada database dengan skema awal

Apabila proses deployment berhasil maka akan berakhir dengan pesan seperti berikut:

ant deploy sukses

Pesan Error pada saat Deployment

kita akan melihat beberapa pesan error pada saat deployment. berikut ini beberapa bugs yang dapat diabaikan karena merupakan bugs dalam Jboss:

Error
error parsing
Entry will be ignored

Pesan di bawah ini membuktikan kalau versi komunitas dari EJBCA tidak mendukung proteksi database integrity:

Tidak ada Database Integrity Protection

Apapun yang kita lakukan, kita akan selalu melihat pesan error. Beberapa error harus segera diselesaikan sebelum lanjut ke instalasi. namun kalau deployment berhasil maka kita akan melihat pesan berikut:

sukses deploy

Pesan error yang muncul pada bagian akhir deployment yaitu:

appserver.error.message:
     [echo] jndi.properties.file: /opt/ejbca_ce_6_2_0/conf/jndi.properties.jboss7

dapat diabaikan

Lebih Detail soal Ant

Kenapa kita melakukan ant deploy sebelum melakukan ant install? ada dua alasannya:

  • untuk menguji file ejbca.ear sukses di-compile dari apa yang sudah kita bangun sejauh ini. Menjalankan ant deploy sambil membaca log memberikan kita sebuah kesempatan untuk memperbaiki kesalahan sebelum lanjut ke tahap selanjutnya. Setelah instalasi komplit, akan jauh lebih sulit untuk memperbaiki kesalahan-kesalahan yang terjadi pada konfigurasi.
  • yang lebih penting lagi, file ejbca.ear haruslah ada sebelum file install dapat dieksekusi.

Memang perlu meluangkan waktu sedikit untuk menggambarkan dengan lebih detil apa saja yang dilakukan oleh beragam perintah ant dan belajar beberapa hal yang baru. Mempelajari ant akan sangat berguna ketika memperbaiki beberapa kendala yang terjadi saat instalasi.

  • Seperti yang kita tau, skrip ant deploy membuat beberapa file sementara yang digunakan untuk meng-compile ejbca.ear, meng-compile ejbca.ear, dan kemudian mendorong jboss untuk mendeploy-nya. Ada dua fungsi yang berbeda di sini yaitu:
    pertama, ant menjalankan build yang melakukan persiapan dan kompilasi.
    kedua, ant menggunakan jboss jee.deploy untuk melakukan transfer ke jboss.
  • proses build dapat dipanggil dengan menggunakan perintah ant build. namun perintah ant deploy menjalankan keduanya, build dan deploy.
  • skrip ant install mengambil file konfigurasi kita, menggunakan informasi tersebut untuk menciptakan konfigurasi yang lebih jauh lagi (seperti file keystore), dan meng-copy file-file baru tersebut ke lokasi-lokasi yang lebih tepat. Bermacam perubahan pada jboss juga dibuat oleh skrip ini. dan full deployment harus dijalankan secara manual setelah instalasi selesai.
    Sebuah skrip terpisah untuk instalasi dibutuhkan untuk memisahkan hal yang dilakukan hanya sekali (seperti mengenerate keystore) dari hal yang dilakukan berulang-ulang saat deployment. Kita tidak perlu membangun ulang setiap kali kita ingin deploy.
  • perintah ant clean akan menghapus file-file temporary (sementara) yang dihasilkan saat deployment sebelumnya yang mungkin secara tidak sengaja masih ada atau tertinggal. Menghapus file-file temporary tersebut dapat membantu memecahkan error-error yang muncul saat deployment.
  • jika kalian tetap menerima error selama deployment setelah melakukan ant clean, kalian boleh mencoba sebuah perintah yng sudah usang: ant bootstrap. Secara teori, semua fungsi ant bootstrap sekarang dijalankan oleh ant deploy.

Seperti yang mungkin anda harapkan, semua perintah harus dieksekusi oleh user jboss. jika tidak, kalian akan melhat error seperti berikut saat service menyala atau saat deployment:

06:31:45,480 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (MSC service thread 1-4) JSF1051: Service entry ‘org.jboss.as.web.deployment.jsf.JsfInjectionProvider’ does not extend DiscoverableInjectionProvider. Entry will be ignored.

06:31:43,811 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report
JBAS014777:   Services which failed to start: service jboss.web.connector.httpspub: org.jboss.msc.service.StartException in service jboss.web.connector.httpspub:
JBAS018007: Error starting web connector service jboss.web.connector.httpspriv: org.jboss.msc.service.StartException in service jboss.web.connector.httpspriv:
JBAS018007: Error starting web connector

Jika tidak ada error yang muncul, kita bisa melanjutkan ke proses instalasi. Ada baiknya untuk merestart jboss, kemudian lakukan install. Hal ini untuk menghindari error out-of-memory yang sesekali bisa terjadi pada Jboss.

  • Jika benar terjadi out of memory, lakukan “kill -9” pada proses Jboss dan start kembali proses Jboss nya. setelah itu kita bisa menjalankan perintah ant dengan baik.

untuk melakukan instalasi maka jalankan ant install. Caranya:

cd /opt/ejbca
ant install

Keystores Awal

Keystore menyimpan sertifikat yang digunakan oleh EJBCA untuk mengamankan web portal, tidak lebih. Keberadaan mereka selama instalasi membuat mereka sangat penting, tetapi mereka memiliki sedikit relevansi dengan fungsi “Certificate Authority” dari EJBCA.

  • Mereka tidak digunakan untuk menyimpan kunci dan sertifikat yang dihasilkan oleh EJBCA setelah aplikasi ini live di production –  informasi tersebut disimpan di dalam database.
  • pada sebuah instalasi yang terdistribusi, mereka mempunyai peran penting dalam autentikasi lintas server (cross-server).

ketika skrip install berjalan, skrip tersebut akan melakukan bermacam operasi sampai akhirnya membawa kita untuk memasukkan beberapa password yang digunakan untuk file-file keystore. File-file keystore tersebut berada di /opt/ejbca/p12 dan mereka adalah:

  • tomcat. jks → Menyimpan sertifikat yang digunakan jboss untuk mengamankan web portal EJBCA dengan TLS.
  • trustore.jks → menyimpan sebuah copy dari key root CA yang mengeluarkan sertifikat TLS.

Setelah pembuatan, file-file ini di-copy oleh script install tersebut ke /opt/jboss/standalone/configuration/keystore, dan file tomcat.jks di rename menjadi keystore.jks di direktori baru.

Penting untuk dimengerti bahwa ketika ant membuat keystore di /opt/ejbca/p12, jboss menggunakan keystore yang berada pada /opt/jboss/standalone/configuration/keystore untuk TLS.

  • file superadmin.p12 yang berisi sertifikat klien yang digunakan untuk mengautentikasi akun administrator juga berada di /opt/ejbca/p12. file ini tidak di copy ke direktori jboss seperti keystore lainnya.

Java tool yang digunakan untuk mengatur keystore disebut keytool, dan (saat instalasi) keytool tersebut dipanggil oleh sebuah link pada /usr/bin. Melalui alternatives, link ini diarahkan ke /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/keytool. Untuk mencegah terjadinya beberapa masalah yang mungkin muncul (karena menggunakan enkripsi EC), gunakan enkripsi RSA untuk keystore kita. seperti contoh di atas.

Seperti telah disebutkan tadi, ant install menghasilkan copy awal dari keystore yang didasarkan pada konfigurasi kita di install.properties dan web.properties. Tergantung dari bagaimana kita mengkonfigurasi file-file tersebut, kalau kita banyak mengisi informasi pada kedua file tersebut, maka kita tidak akan diminta untuk menginput lagi pada saat ant install dijalankan. Namun kalau kalian melakukan konfigurasi seperti contoh, maka ant install  akan membawa kita untuk mengisi 3 password untuk meng-autentikasi keystore:

Please enter the password of the truststore with the CA certificate for https? [changeit]
Please enter the password of the keystore with the TLS key for https [serverpwd]

(dan kemudian)
Please enter the superadmin password (default: ejbca) ? [ejbca]

Sebagai klarifikasi, password-password tersebut adalah untuk:

  • “the password of the truststore with the CA certificate for https” adalah password untuk trustore.jks
  • “the password of the keystore with the TLS key for https” adalah password untuk tomcat.jks
  • “superadmin password” adalah password untuk file superadmin.p12

sekali lagi, kita bisa mengisi password tersebut pada file .properties sehingga tidak diminta mengisi saat melakukan ant install. hanya saja, akan lebih baik kalau tidak menyimpan password dalam format clear text.

  • Tapi sayangnya, EJBCA tetap menyimpan hasil copy dari keystore password dalam format clear text di standalone.xml

Idealnya, EJBCA hanya akan menyimpan password-password ini dalam format hash. namun tidak ada yang bisa kita lakukan dalam waktu dekat ini.

setelah keystore selesai dibuat, ant install akan memperlihatkan ringkasan dari root CA yang kita buat seperti gambar berikut:

ant.install 1

Jika proses pembuatan keystore gagal atau bermasalah karena kita mengubah konfigurasi (tidak menggunakan Enkripsi RSA), ant install akan mengeluarkan pesan seperti berikut:

 [java] org.ejbca.ui.cli.ErrorAdminCommandException: org.cesecore.certificates.ca.InvalidAlgorithmException: Signature algorithm SHA384withRSA is not one of the allowed signature algorithms. Available algorithms: {SHA1WithRSA, SHA256WithRSA, SHA384WithRSA, SHA512WithRSA, SHA256WithRSAAndMGF1, SHA1withECDSA, SHA224withECDSA, SHA256withECDSA, SHA384withECDSA, SHA1WithDSA, GOST3411withECGOST3410, GOST3411withDSTU4145}.

dan console log akan mengeluarkan pesan seperti berikut:

06:21:15,184 ERROR [org.apache.tomcat.util.net.jsse.JSSESocketFactory] (MSC service thread 1-2) Failed to load keystore type JKS with path /opt/jboss/standalone/configuration/keystore/keystore.jks due to /opt/jboss/standalone/configuration/keystore/keystore.jks (No such file or directory): java.io.FileNotFoundException: /opt/jboss/standalone/configuration/keystore/keystore.jks (No such file or directory)

06:21:15,188 ERROR [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-2) Error initializing endpoint: java.io.FileNotFoundException: /opt/jboss/standalone/configuration/keystore/keystore.jks (No such file or directory)

untuk troubleshooting keystore ini kita memang harus melihat error yang terjadi pada hasil keluaran ant install dan juga pada console log (nohup.out). Namun biasanya masalah berasal dari syntax keytool yang ant install taruh bersama-sama. Kalian bisa menduga syntax ini dari pesan yang diberikan pada output console ant.

Finalisasi Instalasi

Disamping dari pembuatan keystore, skrip install juga melakukan beberapa hal berikut:

  • membuat instance untuk Management CA (Root CA) di dalam database.
  • mengupdate standalone.xml dengan informasi keamanan, web session, keystore.

Dalam log file, kita akan melihat banyak pesan, utamanya terkait dengan fungsi enkripsi untuk file keystore. Tapi cara terbaik adalah dengan memastikan sendiri bagaimana instalasi berlangsung dengan cara membaca pesan melalui log console:

Registering Web Context

Jika melihat web context berhasil didaftarkan, kalian bisa merasa yakin kalau fungsi EJBCA sedang berhasil dibangun. Tapi ingat, kebanyakan fungsi dari yang dibangun tersebut tidak bisa di browsing langsung untuk memeriksa fungsi mereka. Kita harus membuat CA kita sendiri terlebih dahulu. Juga beberapa service seperti healthcheck, hanya bisa dilakukan dari localhost (seperti yang tertera pada file properties kalau tidak ditambahkan)

Instalasi yang sukses akan diakhiri dengan pesan “BUILD SUCCESSFULL” seperti gambar berikut:

ant.install 2

dan setelah sukses tersebut, kita perlu menjalankan ulang (restart) service JBoss. setelah di restart maka kita harus melihat console log dan memastikan kalau Jboss dan ejbca sama-sama berjalan. Lognya kurang lebih akan seperti ini:

log sukses merestart jboss setelah proses ant install selesai (ejbca).

Pengujian

Untuk menguji apakah instalasi sudah dilakukan dengan benar, caranya adalah masuk ke Browser dan ketikkan alamat berikut:

http://<ip atau domain>:8080

maka akan muncul tampilan berikut:

Sudah running

dan untuk masuk ke halaman EJBCA-nya, tambahkan /ejbca setelah port tersebut. maka akan tampil halaman berikut:

halaman ejbca

Saran, silahkan redirect port tersebut dari 8080 ke 80 agar lebih mudah dalam mengakses (ikuti petunjuk konfigurasi firewall).
Kalau sudah di redirect, tidak perlu lagi menambahkan port 8080 di belakangnya.

Notes:

Tulisan ini merupakan hasil pengujian dari blog ejbcacentos dengan melakukan beberapa modifikasi sesuai dengan kebutuhan.

sumber lainnya datang dari link berikut.

Facebook Comments Box

Comments are closed.