OpenSSL s_clientでWebサーバやメールサーバに接続する方法

Telnetは基本的には次のようにコマンドを実行した。

Telnetコマンドの基本的な使い方

Telnet [オプション] ホスト ポート番号

OpenSSL s_clientではこれが次のようになる。

OpenSSL s_clientの基本的な使い方

openssl s_client [オプション] -connect ホスト:ポート番号

Telnetを使っていれば、上記のシンタックスを見れば大体のことがわかると思う。Telnetコマンドとの大きな違いはオプションだ。OpenSSL s_clientには、暗号方式を指定するオプション、現代のネットワークで要求される機能を指定するオプションがある。

Opensource.comは、OpenSSL s_clientの使用例としてWebサーバに接続して対話する例と、SMTPサーバ(メールサーバ)に接続してメールを送信する方法をサンプルとして取り上げている。

Webサーバ(HTTPS)への接続は次のようになる。ポート番号として443を指定するのがポイントだ。接続すると、次のように証明書の情報が表示される。

  • https://www.google.com/へ接続したサンプル

    https://www.google.com/へ接続したサンプル

Webサーバに接続できたので、「GET /」と要求を入力する。すると、次のようにレスポンスが返ってくることを確認できる。TelnetコマンドでWebサーバ(http)と対話するように、OpenSSL s_clientでWebサーバ(https)と対話できることがわかる。

  • Webサーバ(https)と対話しているサンプル

    Webサーバ(https)と対話しているサンプル

試しに同じことをTelnetコマンドで実行すると、次のようになる。Telnetコマンドは暗号化された通信に対応していないので、当然ながらサーバと対話することはできていない。

  • telnetコマンドではWebサーバ(https)と対話できない

    TelnetコマンドではWebサーバ(https)と対話できない

一方、SMTPサーバ(メールサーバ)に接続してメールを送信する場合、オプションとして「-starttls smtp」とプロトコルを指定するところがポイントだ。

  • smtp.gmail.comへ接続したサンプル

    smtp.gmail.comへ接続したサンプル

OpenSSL s_clientでSMTPサーバ(submission)へ接続したあとは、次のように認証手続きを開始している。

  • SMTPサーバ(submission)と対話しているサンプル

    SMTPサーバ(submission)と対話しているサンプル

Opensource.comは、認証を処理するためにユーザーIDとパスワードを別のコマンドでエンコードし、それを貼り付ける方法を紹介している。ただし、この方法を試しても、認証が通らないメールサーバが多い点には注意が必要だ。別のオプションが必要なものがあったり、メールはサイバー攻撃で悪用されることが多いためセキュリティ機能が強化されており、この方法だけでは認証できなくなっているものもあるからだ。

OpenSSL s_clientを使ってみよう

Opensource.comで取り上げているサンプルはWebサーバ(https)とSMTPサーバ(submission)へOpenSSL s_clientを使って接続するというものだが、よいサンプルだと思う。特にWebサーバ(https)への接続は簡単で試しやすい上、OpenSSL s_clientの動作を理解する上でわかりやすい。

サーバとの通信で実際にどのようなやりとりが行われているかを理解することは、セキュリティや脆弱性について理解する上でも手助けとなる。このレベルのやりとりを要求されるエンジニアの数は限定されるだろうが、ネットワークでの通信を体感できる操作であり学習にも結びつくので、ぜひ一度使い方を調べて試してもらえればと思う。