Publish HTTPS Local Server Using Cloudflare
Tags: cloudflarechallenge, administrator, linux, devops
Published: 2024-05-21 14:25:34

hallo world!
Postingan kali ini akan membahas sedikit studi kasus, kita akan membuat server lokal kita agar bisa di akses online. Kali ini kita akan hubungkannya dengan [cloudflare](https://www.cloudflare.com/).

Kenapa cloudflare? 
Karena Cloudflare memiliki fitur _CDN (Content Delivery Network)_ dan juga _DDOS Protection_, sehingga membuat website lebih aman.

Kita akan langsung ke lab, berikut ini gambaran topologinya

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b080s6jsud7xo41nt4jn.png)
 
Sedikit saya jelaskan Topologinya, jadi pada gambar di atas saya punya server local, router dengan Public Static IP, domain `nzucode.store` (berlangganan pada provider) dan akun cloudflare.

- **Step 1**: Pointing Domain ke Cloudflare

Pertama kita perlu melakukan forwarding port 80 dan 443 pada router, ini bertujuan agar server lokal kita bisa di ekspose keluar, pada kasus saya menggunakan mikrotik.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3t0vyv32wuh6o114cjcz.png)

Pada cloudflare kita copy pada bagian nameserver

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aq51bjrjag4rt7009ncc.png)
Ini nantinya akan kita arahkan untuk nameserver domain kita. Untuk caranya berbeda-beda tergantung provider domain yg kita pakai, disini saya menggunakan rumahweb sebagai providernya. Kurang lebih seperti ini caranya [https://www.rumahweb.com/journal/cara-setting-domain-di-cloudflare/](https://www.rumahweb.com/journal/cara-setting-domain-di-cloudflare/)

- **Step 2**: Konfigurasi SSL Certificate

Kita akan membuat certificate SLL pada cloudflare, Certificate ini yg nantinya akan kita pasang pada sisi server local. Pastikan untuk mengcopy dan menyimpanya, karena certificate `.pem` hanya bisa dilihat satu kali.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ewlr5zsqedl1a97a0i8h.png)

Pastikan juga untuk enable beberapa opsi berikut

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9n1910hvtqs4kqv4sfwo.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39txful7y23zw0qpyguh.png)

- **Step 3**: Install Certificate Pada Local Server

Pertama buat config file di `/etc/apache2/sites-available`
untuk nama confignya misal `nzucode.com.conf`, Untuk referensi kita bisa copy juga dari `default-ssl.conf`, tapi nanti <u>perlu ada yg di ubah</u>. Contoh konfignya saya cantumkan berikut:

```
<VirtualHost *:443>
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile      /etc/ssl/certs/nzucode.pem
        SSLCertificateKeyFile /etc/ssl/private/nzucode.key

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
```
Kita buat file dengan nama `nzucode.pem` pada directory `/etc/ssl/certs/` lalu paste certificate `.pem` yang di dapat dari cloudflare.

```
nano /etc/ssl/certs/nzucode.pem
```
Buat juga file dengan nama `nzucode.key` pada directory `/etc/ssl/private/` dan pastekan juga certificate `.key` yang sebelumnya kita dapatkan dari cloudflare juga.

```
nano /etc/ssl/private/nzucode.key
```

Untuk direktory SSL `.pem` dan `.key` bisa di sesuaikan sesuai config `site-available` yg kita setting.

Selanjutnya tinggal aktifkan `modul ssl` dan enable site confignya (Ini bertujuan untuk enable config nzucode.com.conf)

```
a2enmod ssl
```
```
a2ensite nzucode.com.conf
```

Setelah itu pastikan confignya semua benar dengan 

```
apachectl configtest
```

jika terdapat error seperti berikut ini

```
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
```
Cukup tambahkan syntak berikut ini `ServerName 127.0.0.1`
pada baris paling bawah config file `/etc/apache/apache2.conf`.

```
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
ServerName 127.0.0.1

```

lalu coba lagi jalankan perintahnya

```
apachectl configtest
```

jika sudah berhasil lakukan `reload` dan `restart` apachenya

```
systemctl reload apache2.service
systemctl restart apache2.service
```
- **Step 4**: Konfigurasi SSL Certificate
Terakhir kita hanya perlu testing dengan [ssl checker](https://www.sslshopper.com/ssl-checker.html) 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y9sulmus0258rerrjacr.png)

Coba akses halaman web nya, seharusnya sudah `https`.
Selamat mencoba, semoga bermanfaat.