Instalasi Signserver 5.2.0 pada Ubuntu Server 18.04

Apa itu Signserver? Dalam webnya dijelaskan bahwa Signserver merupakan sebuah framework untuk melakukan berbagai tanda tangan digital untuk aplikasi yang berbeda. Signserver secara digital bisa menandatangani dokumen, code, stempel waktu, dan ePassports. Signserver menjaga keys untuk melakukan penandatanganan tetap aman, dan alur kerja kalian mudah, aman dan bisa diaudit.

Signserver ini melakukan pendandatanganan di sisi server dengan bermacam plugins untuk tipe tanda tangan yang berbeda. Keys akan disimpan secara aman di sisi server (lebih bagus bila menggunakan HSM) dan penggunanya diautentikasi terlebih dahulu sebelum melakukan penandatanganan secara online.

Sebuah instance Signserver bisa melakukan banyak penandatanganan yang berbeda dan menampung banyak pengguna. Bisa dibilang Signserver ini merupakan solusi sederhana untuk melakukan penandatanganan digital.

Dalam kasus saya sendiri, saya menggunakan Signserver untuk melakukan stempel waktu (Timestamps). Jadi saat seorang pengguna melakukan penandatanganan dokumen secara elektronik, dokumen tersebut juga akan ditandatangani oleh penanda waktu yang ada di Signserver ini dan hasilnya tercatat dalam log server. Bukan tidak mungkin kedepannya saya akan menggunakan fungsi lainnya dari Signserver.

Arsitektur Signserver. Pic via Primekey

Prasayarat

Sebelum melakukan instalasi Signserver pada Ubuntu Server 18.04, ada beberapa prasyarat yang harus kalian penuhi yaitu:

  1. OpenJDK 8 (Java)
  2. Wildfly 10+ (Application Server)
  3. Mariadb 10+ (Database)
  4. MariaDB Java Client 2.1.0 (bisa diunduh DI SINI)
  5. Apache Ant
  6. Apache Maven 3 (Opsional)
  7. Signserver 5.2.0 (bisa diunduh DI SINI)

Instalasi JAVA

Untuk melakukan instalasi Java, jalankan perintah berikut:

sudo apt install openjdk-8-jdk openjdk-8-jre
install java

Instalasi Database

Untuk melakukan instalasi database, jalankan perintah berikut:

sudo apt install mariadb-server mariadb-client
Instalasi Mariadb. Versi yang saya gunakan adalah 10.4

Berikutnya adalah membuat user untuk signserver, caranya:

mysql -u root -p
create database <nama_database>;
grant all privileges on <nama_database>.* to <user>@<host> identified by <password>;
Membuat database dan user untuk Signserver

Berikutnya adalah menentukan format binlog untuk MariaDB, caranya dengan menambahkan atau mengubah baris berikut pada my.cnf

binlog_format=row

Instalasi Apache Ant

Untuk melakukan instalasi Apache Ant, jalankan perintah berikut:

sudo apt install ant
instalasi ant

Instalasi Application Server

Application Server yang dimaksud di sini adalah Wildfly. Untuk melakukan instalasinya, kalian hanya perlu mengeksekusi shell script yang bisa kalian unduh DI SINI

Silakan ubah bagian ini menggunakan editor kesukaan kalian. Sesuaikan dengan versi Wildfly dan juga nama user dan direktori yang kalian inginkan

wildfly script

Jika sudah diubah, silakan ekskusi script di atas dengan perintah:

sudo sh wildfly.sh
Eksekusi script wildfly

Secara otomatis script di atas akan menambahkan wildfly sebagai service. Bila sudah selesai, jalankan service Wildfly dengan perintah:

sudo service wildfly start
sudo service wildfly status
Service wildfly sudah berjalan

Bila ada perubahan yang ingin dilakukan seperti penambahan $JAVA_HOME dan penggunaan memori, silakan ubah di:

vi /opt/wildfly/bin/standalone.conf
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
JAVA_OPTS="-Xms2048m -Xmx2048m -Djava.net.preferIPv4Stack=true"

Application Server sudah terpasang. Untuk mengujinya, silakan buka browser dan ketikkan alamat:

http://host:8080

Apabila benar, maka akan tampil halaman Wildfly

Halaman Wildfly

Selanjutnya adalah menguji untuk masuk ke halaman admin dari Wildfly. Caranya adalah dengan mengakses:

http://localhost:9990

Silakan masukkan username dan password yang kalian masukkan dalam script wildfly.sh

Halaman admin dari wildfly

Konfigurasi Application Server

Ada banyak konfigurasi lainnya yang bisa dilakukan pada application server. Diantaranya adalah:

Konfigurasi Web Server Keystore 

Untuk mengkonfigurasi Webserver TLS Keystore, silakan copy file keystore dan truststore ke dalam direktori keystore yang ada di application server. Berikut ini adalah lokasinya:

WILDFLY_HOME/standalone/configuration/keystore/keystore.jks
WILDFLY_HOME/standalone/configuration/keystore/truststore.jks

Untuk tujuan pengujian, kalian bisa mengambil file keystore (dss10_demo-tls.jks) dan truststore (dss10_truststore.jks) yang tersedia di Signserver pada direktori res/test/dss10/

lokasi dss10_demo-tls.jks dan dss10_truststore.jks

Copy dan rename keystore dan truststore

Konfigurasi TLS dan HTTP

Berikut ini adalah tahapan cara bagaimana untuk mengkonfigurasi TLS dan HTTP dengan 3 port yang berbeda. Port 8080 akan digunakan untuk traffic HTTP umum, port 8442 akan digunakan untuk HTTPS dengan autentikasi server, dan port 8443 untuk HTTPS dengan autentikasi klien dan server. Caranya:

  1. Jalankan JBoss CLI dengan perintah:
    cd $APPSRV_HOME/bin/
    sh jboss-cli.sh
    connect

    Masuk ke JBoss-CLI
  2. Untuk menghapus konfigurasi TLS dan HTTP yang sudah ada dan mengizinkan port 8443, jalankan perintah berikut:
    /subsystem=undertow/server=default-server/http-listener=default:remove 
    /subsystem=undertow/server=default-server/https-listener=https:remove 
    /socket-binding-group=standard-sockets/socket-binding=http:remove
    /socket-binding-group=standard-sockets/socket-binding=https:remove 
    :reload

  3. Konfigurasi interface dengan menggunakan bind address yang tepat. Contoh ini menggunakan 0.0.0.0 agar tersedia untuk siapapun:
    /interface=http:add(inet-address="0.0.0.0")
    /interface=httpspub:add(inet-address="0.0.0.0")
    /interface=httpspriv:add(inet-address="0.0.0.0")


    Sebagai catatan:
    Nilai default batas ukuran untuk HTTP post adalah 10MB. Untuk mengizinkan ukuran yang lebih besar, naikan batas listeners HTTP/HTTPS menggunakan atribut max-post-size atribut pada contoh kode berikut.
    Untuk Wildfly10: Ubah max-post-size pada file standalone.xml. Jika sudah diubah, jangan lupa untuk me-restart service Wildfly.

  4. Konfigurasi HTTPS httpspriv listener dan atur agar port privat tersebut membutuhkan sertifikat klien. Gunakan nilai yang tepat untuk key-alias (hostname), password (keystore-password), ca-certificate-password (trustore password), dan protokol yang didukung. Untuk WIldfly 14, gunakan enable-http2=”false” untuk menghindari pesan error dalam log.
    /core-service=management/security-realm=SSLRealm:add()
    /core-service=management/security-realm=SSLRealm/server-identity=ssl:add(keystore-path="keystore/keystore.jks", keystore-relative-to="jboss.server.config.dir", keystore-password="serverpwd", alias="localhost")
    :reload
    
    /core-service=management/security-realm=SSLRealm/authentication=truststore:add(keystore-path="keystore/truststore.jks", keystore-relative-to="jboss.server.config.dir", keystore-password="changeit")
    :reload
    
    /socket-binding-group=standard-sockets/socket-binding=httpspriv:add(port="8443",interface="httpspriv")
    /subsystem=undertow/server=default-server/https-listener=httpspriv:add(socket-binding="httpspriv", security-realm="SSLRealm", verify-client=REQUIRED, max-post-size="10485760", enable-http2="true") 
    tahap pertama
    Tahap Kedua

    Tahap Ketiga
  5. Konfigurasi default HTTP listener. Untuk yang menggunakan Wildfly 14, gunakan enable-http2=”false” untuk mencegah pesan error di dalam log
    /socket-binding-group=standard-sockets/socket-binding=http:add(port="8080",interface="http")
    /subsystem=undertow/server=default-server/http-listener=default:add(socket-binding=http, max-post-size="10485760", enable-http2="true")
    /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket, value="httpspriv")
    :reload

  6. Konfigurasi HTTPS httpspub listener dan mengatur port SSL untuk publik yang tidak membutuhkan sertifikat klien. Untuk yang menggunakan Wildfly 14, gunakan enable-http2=”false” untuk mencegah pesan error di dalam log.
    /socket-binding-group=standard-sockets/socket-binding=httpspub:add(port="8442",interface="httpspub")
    /subsystem=undertow/server=default-server/https-listener=httpspub:add(socket-binding="httpspub", security-realm="SSLRealm", max-post-size="10485760", enable-http2="true")
    tahap pertama

    Tahap kedua
  7. Konfigurasi HTTP listener (Remoting) dan mengamankan CLI dengan membuang http-remoting-connector agar tidak menggunakan HTTP Port dan menggunakan port terpisah (4447).  Untuk yang menggunakan Wildfly 14, gunakan enable-http2=”false” untuk mencegah pesan error di dalam log.
    /subsystem=remoting/http-connector=http-remoting-connector:remove
    /subsystem=remoting/http-connector=http-remoting-connector:add(connector-ref="remoting",security-realm="ApplicationRealm")
    /socket-binding-group=standard-sockets/socket-binding=remoting:add(port="4447")
    /subsystem=undertow/server=default-server/http-listener=remoting:add(socket-binding=remoting, max-post-size="10485760", enable-http2="true")

  8. Agar Webservice bekerja dengan sempurna ketika meminta sertifikat klien, kalian perlu untuk mengatur WSDL-nya. Untuk mengonfigurasinya, jalankan perintah:
    /subsystem=webservices:write-attribute(name=wsdl-host, value=jbossws.undefined.host)
    /subsystem=webservices:write-attribute(name=modify-wsdl-address, value=true)
    :reload

  9. Untuk mengonfigurasi URI encoding, jalankan perintah:
    /system-property=org.apache.catalina.connector.URI_ENCODING:remove()
    /system-property=org.apache.catalina.connector.URI_ENCODING:add(value=UTF-8)
    /system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:remove()
    /system-property=org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING:add(value=true)
    :reload

Konfigurasi Database Driver

Sekarang waktunya menambahkan driver MariaDB dengan metode hot-deploying. Driver tersebut akan diambil oleh WildFly dan di-deployed, dan mengizinkan untuk memasukannya ke dalam data-source pada tahap berikutnya. Kalian bisa menggunakan nama yang umum (tanpa versi). Untuk menggunakan nama umum tersebut, jalankan perintah berikut:

cp /opt/mariadb-java-client-2.1.0.jar $APPSRV_HOME/standalone/deployments/mariadb-java-client.jar
konfigurasi database driver mariaDB

Konfigurasi Data Source

Untuk menambahkan data source agar Signserver bisa menggunakannya, jalankan perintah berikut ini dengan menggunakan Jboss CLI. Data Source yang akan di-deploy ini menggunakan driver dari MariaDB yang kalian copy sebelumnya. Berikut adalah konfigurasnya:

sh jboss-cli.sh
connect
data-source add --name=signserverds --driver-name="mariadb-java-client.jar" --connection-url="jdbc:mysql://127.0.0.1:3306/<nama_db>" --jndi-name="java:/SignServerDS" --use-ccm=true --driver-class="org.mariadb.jdbc.Driver" --user-name="<nama_user_db>" --password="<password_user_db>" --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;" --enabled=true
:reload
penambahan data source

Hasil penambahan ke dalam data source ini bisa kalian lihat di standalone.xml.

Instalasi Maven

Maven ini digunakan untuk membangun Signserver dari source. Untuk memasangnya, jalankan perintah:

sudo apt install maven
Instalasi Maven

Instalasi Signserver

Unduh aplikasi Signserver dan unzip aplikasi tersebut. Kalau sudah selesai, barulah tahapan instalasi bisa dilakukan. (saye meletakkan hasil ekstrak di folder /opt).

Jalankan perintah berikut:

cd /opt/signserver
mvn help:effective-settings
bin/ant init
mvn dimulai
mvn build selesai
Melihat Edisi atau versi dari signserver. Yang digunakana adalah Community Edition

Berikutnya adalah membangun Signserver dari source. Caranya:

mvn install -DskipTests
Hasil mvn install

proses akan memakan waktu sekitar 7 menit. Jadi silakan tunggu hingga selesai ya.

Set Environment Variables

Tahapan selanjutnya adalah mengatur beberapa variabel. Kalian bisa menambahkannya di .bash.rc seperti berikut:

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

export ANT_HOME=/opt/apache-ant-1.9.7
export PATH=$PATH:$ANT_HOME/bin

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

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

export SIGNSERVER_HOME=/opt/signserver
export PATH=$SIGNSERVER_HOME/bin:$PATH

export SIGNSERVER_NODEID=node1

Konfigurasi Deployment

Sekarang adalah waktunya untuk mengubah file signserver_deploy.properties. Di dalam file tersebut terdapat pengaturan untuk aplikasi, database dan web service. Untuk mengubahnya, lakukan perintah berikut:

cd /opt/signserver
cp conf/signserver_deploy.properties.sample conf/signserver_deploy.properties
vi conf/signserver_deploy.properties
copy file signserver_deploy.properties

Ubah isinya menjadi seperti berikut:

beberapa yang perlu diubah di signserver_deploy.properties

Deployment

Sekarang waktunya untuk melakukan deployment. Jalankan perintah berikut:

cd /opt/signserver
bin/ant deploy
proses deploy

Pastikan Application Server berjalan dengan baik dan memverifikasi kalau Signserver ter-deploy dengan baik. Sebagai contoh, lihat pada server log di Wildfly, jalankan:

ls /opt/wildfly/standalone/deployments | grep signserver.ear*
deployment berhasil
signserver ear deployed

Verifikasi dan Mengakses Signserver

Untuk memverifikasi Signserver ter-deploy dengan baik, akses halaman web-nya dengan mengetikkan alamatnya di browser

http://<alamat_web>:8080/signserver
Signserver berhasil terpasang dengan baik

Untuk mengujinya melalui CLI dan melihat versi Signserver-nya, Jalankan perintah berikut di CLI:

cd /opt/signserver
bin/signserver getstatus brief all
Current version of server is: SignServer CE 5.2.0.Final
signserver version

Untuk mengakses halaman administrator dari Signserver, arahkan ke:

http://<alamat_web>:8080/signserver/adminweb/

Untuk mengizinkan siapapun mengakses halaman admin tersebut secara sementara, jalankan perintah berikut:

cd /opt/signserver
bin/signserver wsadmins -allowany

******

Itu tadi sedikit cara melakukan instalasi Signserver 5.2.0. Community Edition. Semoga berguna ya. Pada Tutorial selanjutnya, saya akan coba menjalankan worker yang ada di dalamnya untuk melakukan pendandatanganan.

Sampai jumpa di tutorial selanjutnya 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *