Configure HTTPS with Nginx Web Server

  • Posted on: 17 April 2013
  • By: oon
HTTPS Application Layer

Suatu saat muncul kebutuhan dari client untuk berkomunikasi melalui protokol web biasa, tapi permintaannya untuk menggunakan HTTPS atau Secure HTTP connection, yang biasanya diimplementasi dengan mengintegrasikan SSL ke web server.

Bagian yang harus dimengerti adalah ada certificate SSL yang biasanya harus dibeli pada provider-provider di Internet agar browser dan seluruh web client yang mengakses situs tersebut bisa menjamin bahwa koneksi ke web server tersebut memiliki certificate yang valid dan artinya koneksi diusahakan untuk aman (meski banyak juga di Internet yang berusaha memecahkan enkripsi dari sistem keamanan SSL).

Web server yang digunakan di sejumlah situs operasional kantor kebanyakan menggunakan Nginx, sehingga configurasi dalam artikel ini ditujukan untuk web server open source tersebut [1].

Konfigurasi bisa merupakan gabungan untuk memberikan layanan HTTP dan HTTPS:


server {
listen 80;
listen 443 ssl;
server_name xyz0123.com auth.xyz0123.com;
ssl_certificate /usr/local/nginx/conf/xyz0123.crt;
ssl_certificate_key /usr/local/nginx/conf/xyz0123.ssl.key;

access_log /usr/local/nginx/logs/xyz0123.com-access.log;
error_log /usr/local/nginx/logs/xyz0123.com-error.log;
...

File xyz0123.ssl.key adalah private key, dalam kondisi terdekripsi, sehingga perlu dirahasiakan, hanya bisa dibaca oleh process Nginx. File xyz0123.crt adalah certificate, biasanya SSL certificate chains [1] berupa kumpulan (concatenate) dari ssl.crt + ca.pem + lainnya.

Kemudian kita tinggal melakukan restart Nginx

Salah satu cara mengecek validitas certificate menggunakan shell/console/terminal:


$ openssl s_client -connect xzy0123.com:443
...

Atau jika ingin mencoba membuat script sederhana untuk melakukan validasi certificate menggunakan PHP bisa mencoba:


$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
$read = stream_socket_client("ssl://xyz0123.com:443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
$cert = stream_context_get_params($read);
//var_dump(openssl_x509_parse($cert["options"]["ssl"]["peer_certificate"]));
$crtdata = openssl_x509_parse($cert["options"]["ssl"]["peer_certificate"]);
var_dump($crtdata["name"])."\n";
var_dump($crtdata["subject"])."\n";
var_dump($crtdata["validFrom"])."\n";
var_dump($crtdata["validTo"])."\n";
...

Create CSR from Private Key:


openssl req -new -key ~/domain.com.ssl/domain.com.key -out ~/domain.com.ssl/domain.com.csr

[1] http://nginx.org/en/docs/http/configuring_https_servers.html
[2] http://en.wikipedia.org/wiki/Secure_Socket_Layer
[3] http://www.startssl.com/?app=42

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.