情報処理のWeb教科書―IPA情報処理試験対策のお供に!

セキュアプロトコル―IPSecトンネルモード、TLSハンドシェイク、SSHなど

トップ 情報処理の知識体系 テクノロジ系 技術要素 セキュリティ セキュリティ実装技術 セキュアプロトコル

IPSec、SSL/TLS、SSHなど通信データの盗聴、不正接続を防ぐセキュアプロトコルについてまとめています。IPSecのトンネルモードやTLSハンドシェイクなどの情報も補足しています。

▲記事トップへ

目次

この記事の目次です。

1. IPSec
2. SSL/TLS
3. SSH
4. S/MIME(Secure MIME)

もっと知識を広げるための参考
更新履歴

1. IPSec

IPsecとは、IPパケットに対して暗号化と認証の機能を提供するプロトコルです。 IP Security Protocolの略で、読み方は「あいぴーせっく」です。

トンネルモード

パケットをIP層(OSI参照モデルではネットワーク層)で暗号化するプロトコルで、トンネルモードを使用すると、エンドツーエンドの通信で用いるIPのヘッダまで含めて暗号化されます。 暗号化通信を実現するために、IKE(Internet Key Exchange)を含む複数のプロトコルによって構成されています。

IPSecに関連したIPA情報処理試験の過去問題

以下ではIPSecに関連したIPA情報処理試験の過去問とその解説をまとめています。

2. SSL/TLS

SSL/TLSとは、主にWebサーバとブラウザ間をデータを暗号化して送受信するプロトコル(通信手順)、技術です。 HTTPSで接続したWebサーバとブラウザ間の暗号化通信に利用されます。

SSL/TLSの違いや仕組み、TLSハンドシェイクなど少し掘り下げて解説しています。

SSL/TLSとは(読み方、意味)

SSL/TLSとは、データを暗号化して送受信するプロトコル(通信手順)、技術を意味する言葉です。 SSL/TLSによる通信内容の暗号化を実現させるためにサーバ証明書を用います。

読み方

SSLの読み方は、「エスエスエル」です。Secure Sockets Layerを省略した読み方です。 TLSの読み方は、「ティーエルエス」です。Transport Layer Securityを省略した読み方です。

意味

SSL/TLSは、データを暗号化して送受信するプロトコル(通信手順)、技術を意味する言葉です。 SSL/TLSを使用しているウェブサイトでは、URLが「https://」で始まります。 Webサイトに限らずFTPやSMTPなど様々な通信に利用できます。

実現できること

HTTP over TLS(HTTPS)を用いてエディジタル証明書によるサーバ認証が実現できます。

SSLサーバ証明書の種類

SSLサーバ証明書には、一般的に以下のような種類があります。 SSLの暗号化強度ではなく、認証局を利用するにあたっての審査方法による分類になります。

SSL/TLSの仕組み

SSL/TLSでは、認証局というシステムと連携して通信を行います。

認証局の公開鍵によってサーバ証明書を復号できるかどうかを確認します。 それにより、クライアントがサーバの証明書の本物か偽物かを確認します。

一般的な認証局の公開鍵は、あらかじめWebブラウザに登録されています。 独自に構築した認証局や知名度の低いものは登録されていない場合もあります。

TLSで使用する個人認証用のディジタル証明書

TLSで使用する個人認証用のディジタル証明書は、ICカードにも格納することができ、 利用するPCを特定のPCに限定する必要はありません。

TLSとSSLの違い

TLSとは、SSLをもとに標準化されたSSLの後継バージョンの仕様です。TLSより前のSSLのバージョンには脆弱性があります。

SSLとTLS

現在、SSLといわれているものの多くはTLSプロトコルです。 スペルを間違えやすいです。TSLプロトコルではなくTLSです。

バージョン

SSLプロトコルは、バージョンアップを重ねた後、SSL3.0を元にしたTLS1.0がRFC(ウェブ標準の文書)として定められました。

TLSでもSSLと呼ぶ場合がある

SSL3.0とTLS1.0は大枠の仕組みは同じですが、SSLという名称が広く普及しており、TLSでもTLSといわず、SSLと呼ぶ場合があります。 これを意識してSSL/TLSと表記する場合もあります。

SSL3.0以下はセキュリティの懸念

セキュリティの懸念から、現在では一般的にSSL3.0プロトコルの利用は非推奨とされています。 多くのウェブサイトではSSL3.0の利用を終了し、TLSの最新版など、より安全性が高いバージョンのプロトコルが使われるように設定されています。

ですので、現在、SSLといわれているものの多くはTLSプロトコルです。

SSLサーバ証明書の種類

SSLサーバ証明書は、learning.zealseeds.comのようなドメインと紐づけて作成しますが、審査方法によるSSLサーバ証明書の種類、認証局に発行してもらうSSLサーバ証明書についてまとめていきます。

ドメイン認証型と企業認証型SSL

ドメイン認証型の場合、ドメイン利用サイトに認証用ファイルを配置、ドメインメールが受信可能か、などの方法で認証します。

企業認証型SSLの場合は、第三者が公開している会社情報、電話による確認などを行って認証します。

EV SSLとは

EV SSLとは、Extended Validation SSLを省略した読み方で、拡張検証を行ったSSLという意味になります。

EV SSL証明書の手続き

通常、SSL証明書の手続きには、発行時にメールやファイルアップロードにより該当サイトなどの所有者を認証します。

書類審査など、この認証プロセスをより厳格に審査にして発行されるSSLサーバ証明書がEV SSL証明書になります。

EV SSL証明書の効果

EV SSL証明書を採用している場合、存在するサブジェクトフィールドのOrganization NameにWebサイトの運営団体の組織名が記載されます。

SSL/TLSの利用目的と認証、暗号化、改ざん検知の機能

SSL/TLSの利用目的と認証、暗号化、改ざん検知の機能について見ていきます。

SSL利用目的と機能

SSLの利用目的は安全な通信を行うことです。 SSLには主に認証、暗号化、改ざん検知の機能があります。 データの送信経路での成りすましやデータの盗み見、改ざんなどを防ぎます。

SSLの認証機能

公開鍵証明書というデジタル証明書による通信相手の認証を行います。サーバの認証といいます。

SSLの暗号化機能

ウェブブラウザーとサーバー間での共通鍵暗号(秘密鍵暗号)による通信内容の暗号化を行います。

SSLの改ざん検知機能

ハッシュ関数による改ざん検知を行います。

SSL/TLSの通信の仕組み(ハンドシェイク)

SSL/TLSの通信の仕組みについて見ていきます。

SSL/TLSのハンドシェイクとは

ハンドシェイクとは、SSL/TLSの通信でサーバーを認証する過程のことです。

平文からはじまり、公開鍵暗号方式の公開鍵と秘密鍵を使って、共通鍵暗号方式の共通鍵を共有する手順のことをいいます。 つまり、SSL/TLSのセッション確立までの過程です。 SSL/TLSのセッションは、必ずハンドシェイクから始まります。

公開鍵と秘密鍵を使うところでは、公開鍵暗号方式のRSA、楕円曲線暗号などの暗号が使われます。

セッションが確立したら、セッション キー(共通鍵)を公開鍵暗号方式のDES、AESなどの暗号が使われます。

SSL/TLSの通信手順の概要

SSLによるクライアントとWebサーバ間の通信手順の概要になります。

たとえばA社のWebサーバにPCからTLSを用いたアクセスの場合、、 該当PCがサーバ証明書を入手した後に、認証局の公開鍵を利用してサーバ証明書の正当性を、認証局の公開鍵を使って検証します。

平文から始まり、SSLサーバ証明書を検証し、通信しているサーバーが正しいサーバーかの検証を行います。 サーバーが認証されると、プリマスタシークレットの交換、セッションキー(共通鍵)の共有の手順に進みます。

なお、サーバーがクライアントを認証する場合は、クライアント証明書を利用してクライアント認証が行われる場合もあります。

  1. クライアントからのSSL/TLSによる接続要求に対し、Webサーバは証明書をクライアントに送付する。
  2. クライアントは、保持している認証局の公開鍵によってこのサーバ証明書※1の正当性を確認する。
  3. クライアントは、共通鍵生成用のデータを作成し、サーバ証明書に添付されたWebサーバの公開鍵※2によってこの共通鍵生成用データを暗号化し、Webサーバに送付する。
  4. 受け取ったWebサーバは、自らの秘密鍵によって暗号化された共通鍵生成用データを復号する。
  5. クライアントとWebサーバの両者は、同一の共通鍵生成用データによって共通鍵を作成し、これ以降の両者間の通信は、この共通鍵による暗号化通信を行う。

※1 サーバ証明書の正当性を確認する際に使用するものなので認証局の公開鍵になります。

※2 共通鍵生成用データを暗号化する際に使用するものなのでWebサーバの公開鍵になります。

参考)公開鍵暗号方式と共通鍵暗号方式

公開鍵暗号方式と共通鍵暗号方式については以下にまとめています。

公開鍵暗号方式

公開鍵暗号方式とは、英語でPublic Key Cryptography。 公開鍵と秘密鍵の対になる2つの鍵を使ってデータの暗号化/復号化を行う暗号方式です。 秘密鍵やRSAなどの代表的な暗号の例についてまとめています。

詳細

共通鍵暗号方式

共通鍵暗号方式とは、英語でCommon key cryptosystem。暗号化と復号に同じ鍵を用いる方法です。 共通鍵暗号方式の特徴と、ブロック暗号のDES、AES、ストリーム暗号のKCipher-2などの代表的な暗号の例についてまとめています。

詳細

SSL/TLSの通信手順の例

以下は、ホームページなどでSSLサーバ証明書を申し込んでhttpsで表示する場合を想定したイメージです。 クライアント証明書を使わない場合のSSL/TLSのハンドシェイクの例と解説になります。

SSL/TLSのハンドシェイクの例(クライアント証明書を使わない場合)
SSL/TLSのハンドシェイクの例(クライアント証明書を使わない場合)
手順1―クライアントからのSSL/TLSの接続要求に対し、Webサーバが証明書を送付

クライアントからのSSL/TLSの接続要求に対し、Webサーバが証明書を送付します。

手順の詳細は次の通りです。

  1. ClientHello:クライアントからサーバにアクセスします。
  2. ServerHello:サーバからクライアントに応答の合図を送信します。
  3. Certificate:サーバからクライアントにサーバ証明書を送信します。
  4. ServerHelloDone:サーバーはServerHelloDoneメッセージを送信し、Helloメッセージフェーズが終了したことを伝えます。
手順2―クライアント側が保持している認証局の公開鍵でサーバ証明書の正当性を確認

クライアント側が保持している認証局の公開鍵でサーバ証明書の正当性を確認します。

  1. ClientKeyExchange:クライアントはサーバーの証明書を検証し、認証を行います。
手順3―クライアントが共通鍵生成用のデータを作成して、サーバ証明書に添付されたWebサーバの公開鍵で共通鍵生成用データを暗号化し送付

クライアントが共通鍵生成用のデータを作成して、サーバ証明書に添付されたWebサーバの公開鍵で共通鍵生成用データを暗号化しWebサーバ側に送付します。

手順の詳細は次の通りです。

  1. Change Ciper Spec:クライアントはクライアントからの通信を暗号化するための方法Change Cipher Specをサーバーに通知します。
  2. Finished:クライアントはFinishedメッセージをサーバーに送ります。
  3. Change Ciper Spec:サーバーもサーバーからの通信を暗号化するための方法Change Cipher Specをサーバーに通知します。
  4. Finished:サーバーはFinishedメッセージをクライアントに送ります。
手順4―Webサーバが秘密鍵で暗号化された共通鍵生成用データを復号

Webサーバが自分の秘密鍵で暗号化された共通鍵生成用データを復号します。

手順5―クライアントとWebサーバで同一の共通鍵生成用データによって共通鍵を作成し、以降この共通鍵による暗号化通信を行う

クライアントとWebサーバで同一の共通鍵生成用データによって共通鍵を作成し、以降この共通鍵による暗号化通信を行います。

  1. アプリケーションによる暗号化通信

SSL/TLSの設定の確認方法

httpsで表示できただけで満足すると落とし穴があります。 SSL/TLS導入サイトの7割が設定ミスしているといわれることがあります。 ブラウザで警告を受けてしまったり、そもそも設定ミスでSSL/TLSの目的が果せていなかったということがあります。

SSLサーバ証明書を発行元などが提供している以下のようなSSLの設定の確認が行えるサイトがあります。 試してみましょう。以外に多くのホームページでA+評価になっていないです。

SSL LabsでA+にする設定例(Nginx)

NginxでSSL LabsでA+評価する設定例を以下にまとめています。

nginx.confの記述例

例えば、nginx.confに以下のように記述します。

:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
:
server {
    listen 443 ssl;
:
    ssl on;
    ssl_certificate <証明書発行元から提供されたサーバ証明書+空行+中間証明書をの内容を記述したファイルのパス>;
    ssl_certificate_key <秘密鍵のパス>;
    ssl_dhparam <「openssl dhparam -out <ファイル名> 4096」で作成したファイルのパス>;

    ssl_session_timeout  5m;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
:
}

秘密鍵は「openssl genrsa 2048 > <ドメイン名>.key」と2048を指定して作成します。

A+評価と思っていたらF評価(This server is vulnerable to the OpenSSL Padding Oracle vulnerability (CVE-2016-2107) and insecure. Grade set to F. )

A+評価と思っていましたが、テストしてみたところFでした。

SSLラボでA+評価じゃなくてF評価
SSLラボでA+評価じゃなくてF評価

利用しているOpenSSLのバージョンに複数の脆弱性(CVE-2016-2107, CVE-2016-2108等)がありました。

This server is vulnerable to the OpenSSL Padding Oracle vulnerability (CVE-2016-2107) and insecure. Grade set to F.

OpenSSLのアップデート(yum -y update)で解決。

SSLラボでA+評価
SSLラボでA+評価

SSL LabsでA+にする設定例(Apache2.4)

Apache2.4でSSL LabsでA+評価する設定例を以下にまとめています。

Apache2.4の設定ファイルの例

例えば、httpd.confやssl.confなどApacheが読み込む設定ファイルに以下のように記述します。

:
LoadModule ssl_module modules/mod_ssl.so
:
Listen 443
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLCompression off
:
<VirtualHost *:443>
:
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA!RC4!DH
SSLHonorCipherOrder On
SSLCertificateFile <証明書発行元から提供されたサーバ証明書のパス>;
SSLCertificateChainFile <RapidSSLなど証明書発行元から提供された中間証明書をの内容を記述したファイルのパス>;
SSLCertificateKeyFile <秘密鍵のパス>;

Header add Strict-Transport-Security “max-age=15768000”
:
</VirtualHost>

秘密鍵は「openssl genrsa 2048 > <ドメイン名>.key」と2048を指定して作成します。

Apache に無料SSLのLet's Encryptを設定する例

ここではApache に無料SSLのLet's Encryptを設定する例について見ていきます。

更新ツールのインストール

更新ツールのインストールします。

媒体は「https://dl.eff.org/certbot-auto」です。

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

ダウンロードして保存した/usr/bin/certbot-autoに実行権限を付与したら完了です。

sudo chmod 700 /usr/bin/certbot-auto

証明書の発行

次に証明書を発行します。

sudo certbot-auto certonly --webroot -w <ドキュメント・ルートのパス> -d <ドメイン名> --email <通知メールアドレス>

Apache2.4の設定ファイルの設定例

証明書は「/etc/letsencrypt/live/<ドメイン名>/」の下にシンボリックリンクされますので、こちらをApacheに設定します。

例えば、httpd.confやssl.confなどApacheが読み込む設定ファイルに以下のように記述します。

:
SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン名>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem
:

Apacheの再起動

設定したらApacheを再起動します。

sudo systemctl restart httpd

SSL/TLSに関連したIPA情報処理試験の過去問題

以下ではSSL/TLSに関連したIPA情報処理試験の過去問とその解説をまとめています。

3. SSH

SSHとは、Secure Shellの略で、 リモートログインやリモートファイルコピーのセキュリティを強化したプロトコル、 及びそのプロトコルを実装したコマンドのことをいいます。

SSHの特徴

TCP層とアプリケーション層で暗号化を行う方式で、セッションごとに異なる暗号かぎを生成して使用します。 暗号化アルゴリズムとして、Triple-DES、AES、Blowfish、Arcfourなどが用意されています。 パスワードを用いた認証の他に、公開鍵暗号を用いたRSAなどが使用可能です。

SSHに関連したIPA情報処理試験の過去問題

以下ではSSHに関連したIPA情報処理試験の過去問とその解説をまとめています。

4. S/MIME(Secure MIME)

S/MIMEとは電子証明書を使用して、メールソフト間で電子メールを安全に送受信するための規格です。読み方や意味、暗号方式などS/MIMEについて説明しています。

詳細

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク