OpenSSLとは何か?OpenSSLとは何か?
OpenSSLとは、インターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装した、オープンソースのライブラリのことを指します。 SSL(Secure Sockets Layer)とは、インターネット上で通信を暗号化する技術です。SSLを使ってパソコンとサーバ間の通信データを暗号化することで、第三者によるデータの盗聴や改ざんなどを防ぐことができます。
例えばインターネット上のショッピングサイトで買い物をするときに、住所やクレジットカードを使うこともあるでしょう。住所やクレジットカードはとても重要な個人情報ですので、第三者に漏れたら悪用されかねません。だからこそ、パソコンとサーバ間の通信を暗号化し、情報を守る必要があります。 普段利用しているWebサイトがSSLに対応しているかどうかは、ブラウザのアドレスバーに表示されるURLを確認すればわかります。「http://~~」の場合、SSLに対応しておらず、「https://~~」の場合、SSLに対応しています。

SSL非対応

SSL対応
SSLではクライアントとサーバ間でデータを暗号化して送受信を行う際に、共通鍵暗号化方式を使用します。共通鍵暗号化方式は、データを暗号化と復号化に同じ鍵を使用します。SSLではクライアントとサーバ両方で同じ鍵を持っておくことで、暗号化されたデータの送受信が行われるのですが、この鍵を安全にクライアントとサーバで共有するために、公開鍵暗号化方式が使用されます。公開鍵暗号化方式は、データの暗号化と復号化に異なる鍵が使用します。SSLではサーバが暗号化用の鍵と復号化用の鍵の組み合わせを作成し、復号化用の鍵は秘密鍵としてサーバが持っておき、暗号化用の鍵は公開鍵としてサーバからクライアントに送信されます。

この公開鍵を送信するときは、サーバの正当性を証明するために、「認証局」が作成した証明書が使用されます。秘密鍵の所有者が秘密鍵を紛失したり盗まれたりして、その秘密鍵が悪意のある第三者の手に渡ってしまった場合、本来の所有者になりすまされてしまいます。そこで所有者は秘密鍵を盗まれてしまった場合は、そのことを直ちに届け出て、証明書を無効にする処理を行う必要があります。届け出先が認証局なのです。
OpenSSLの仕組みOpenSSLの仕組み
公開鍵を使った安全な通信路をつくるための基盤をPKI(PublicKeyInfrastructure)と呼びます。SSLもPKIの一種です。Webサーバ上には、サーバ証明書と秘密鍵があり、クライアントはサーバー証明書が取得できます。サーバ証明書は、公開鍵に信頼できる機関である認証局が署名したものです。OpenSSLはHTTPS通信の3分の2のシェアがあると言われています。また多くのソフトにおいて暗号化通信に使用されてもいます。
しかし、2014年には重大な脆弱性が見つかり、問題となりました。いわゆる「Heartbleed」と呼ばれるものです。発表によると、認証局から認定を受けた「安全な」インターネット・Webサーバの約17%(約50万台)には盗難攻撃に対する脆弱性(弱点)があり、サーバーの秘密鍵や利用者のセッション・クッキーやパスワードを盗み出すことが出来る状態にあるとのことです。
影響範囲がとても大きいこともあり、話題となりました。この脆弱性が悪用された場合、システムのメモリ内の情報が第三者に閲覧され、暗号化通信の内容や秘密鍵などの重要情報が漏洩する可能性があります。JVNiPedia(脆弱性対策情報データベース)によると2015年だけでもOpenSSLの脆弱性は28件見つかっていて、それに対する対策が取られています。
Windows7(64bit)でOpenSSLを使うことを通して、その仕組みを紹介します。ここでは、Win32forOpenSSLを使います。
1.インストーラを起動し「Next」をクリックします。
1
2.「Iaccept~」のチェックボックスを選択し、「Next」をクリックします。
2
3.インストールするフォルダを選択し、「Next」をクリックします。

4.スタートメニューフォルダにショートカットを作成します。「Next」をクリックします。

5.OpenSSLのDLLをコピーする先を指定します。「Next」をクリックします。

6.「Install」をクリックします。

7.「Finish」をクリックし、インストール終了です。

環境変数の設定
「環境変数」をクリックします。

「システム環境変数」の「Path」を選択し「編集」をクリックします。

OpenSSLのインストールフォルダ(今回の場合、「C:\OpenSSL-Win32\bin」)を末尾に追加します。
※セミコロンで区切ることをお忘れなく。

最後にコマンドプロンプトを起動し、「openssl」コマンドを実行できることを確認します。

鍵の生成
秘密鍵の生成
opensslgenrsaコマンドを使うと、RSAの秘密鍵を生成することができます。RSAとは公開鍵暗号方式の一種で、開発者の名前をとって名付けられました。RSA暗号を解読するには、巨大な整数を素因数分解する必要があり、効率の良い鍵の発見方法はまだ見つかっていません。

公開鍵の生成
opensslrsaコマンドを使うと先ほど作成した秘密鍵を読み込ませ、-puboutで公開鍵を出力します。

公開鍵で暗号化する
公開鍵を使って公開鍵暗号を行うためにはopensslrsautl-encryptを使います。

秘密鍵で平文化
これを秘密鍵で平文化するには以下のようにopensslrsautl-decryptを使います。

今回、OpenSSLについて、それが何で、どんな仕組みで成り立っているかをまとめました。
導入時の参考になれば幸いです。
最後までお読みいただきありがとうございました。
