情報処理のWeb教科書―IPA情報処理試験対策のお供に!
トップ 情報処理の知識体系 テクノロジ系 技術要素 セキュリティ セキュリティ実装技術 セキュアプロトコル
IPSec、SSL/TLS、SSHなど通信データの盗聴、不正接続を防ぐセキュアプロトコルについてまとめています。IPSecのトンネルモードやTLSハンドシェイクなどの情報も補足しています。
この記事の目次です。
1. IPSec
2. SSL/TLS
3. SSH
4. S/MIME(Secure MIME)
IPsecとは、IPパケットに対して暗号化と認証の機能を提供するプロトコルです。 IP Security Protocolの略で、読み方は「あいぴーせっく」です。
パケットをIP層(OSI参照モデルではネットワーク層)で暗号化するプロトコルで、トンネルモードを使用すると、エンドツーエンドの通信で用いるIPのヘッダまで含めて暗号化されます。 暗号化通信を実現するために、IKE(Internet Key Exchange)を含む複数のプロトコルによって構成されています。
以下ではIPSecに関連したIPA情報処理試験の過去問とその解説をまとめています。
SSL/TLSとは、主にWebサーバとブラウザ間をデータを暗号化して送受信するプロトコル(通信手順)、技術です。 HTTPSで接続したWebサーバとブラウザ間の暗号化通信に利用されます。
SSL/TLSの違いや仕組み、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/TLSでは、認証局というシステムと連携して通信を行います。
認証局の公開鍵によってサーバ証明書を復号できるかどうかを確認します。 それにより、クライアントがサーバの証明書の本物か偽物かを確認します。
一般的な認証局の公開鍵は、あらかじめWebブラウザに登録されています。 独自に構築した認証局や知名度の低いものは登録されていない場合もあります。
TLSで使用する個人認証用のディジタル証明書は、ICカードにも格納することができ、 利用するPCを特定のPCに限定する必要はありません。
TLSとは、SSLをもとに標準化されたSSLの後継バージョンの仕様です。TLSより前のSSLのバージョンには脆弱性があります。
現在、SSLといわれているものの多くはTLSプロトコルです。 スペルを間違えやすいです。TSLプロトコルではなくTLSです。
SSLプロトコルは、バージョンアップを重ねた後、SSL3.0を元にしたTLS1.0がRFC(ウェブ標準の文書)として定められました。
SSL3.0とTLS1.0は大枠の仕組みは同じですが、SSLという名称が広く普及しており、TLSでもTLSといわず、SSLと呼ぶ場合があります。 これを意識してSSL/TLSと表記する場合もあります。
セキュリティの懸念から、現在では一般的にSSL3.0プロトコルの利用は非推奨とされています。 多くのウェブサイトではSSL3.0の利用を終了し、TLSの最新版など、より安全性が高いバージョンのプロトコルが使われるように設定されています。
ですので、現在、SSLといわれているものの多くはTLSプロトコルです。
SSLサーバ証明書は、learning.zealseeds.comのようなドメインと紐づけて作成しますが、審査方法によるSSLサーバ証明書の種類、認証局に発行してもらうSSLサーバ証明書についてまとめていきます。
ドメイン認証型の場合、ドメイン利用サイトに認証用ファイルを配置、ドメインメールが受信可能か、などの方法で認証します。
企業認証型SSLの場合は、第三者が公開している会社情報、電話による確認などを行って認証します。
EV SSLとは、Extended Validation SSLを省略した読み方で、拡張検証を行ったSSLという意味になります。
通常、SSL証明書の手続きには、発行時にメールやファイルアップロードにより該当サイトなどの所有者を認証します。
書類審査など、この認証プロセスをより厳格に審査にして発行されるSSLサーバ証明書がEV SSL証明書になります。
EV SSL証明書を採用している場合、存在するサブジェクトフィールドのOrganization NameにWebサイトの運営団体の組織名が記載されます。
SSL/TLSの利用目的と認証、暗号化、改ざん検知の機能について見ていきます。
SSLの利用目的は安全な通信を行うことです。 SSLには主に認証、暗号化、改ざん検知の機能があります。 データの送信経路での成りすましやデータの盗み見、改ざんなどを防ぎます。
公開鍵証明書というデジタル証明書による通信相手の認証を行います。サーバの認証といいます。
ウェブブラウザーとサーバー間での共通鍵暗号(秘密鍵暗号)による通信内容の暗号化を行います。
ハッシュ関数による改ざん検知を行います。
SSL/TLSの通信の仕組みについて見ていきます。
ハンドシェイクとは、SSL/TLSの通信でサーバーを認証する過程のことです。
平文からはじまり、公開鍵暗号方式の公開鍵と秘密鍵を使って、共通鍵暗号方式の共通鍵を共有する手順のことをいいます。 つまり、SSL/TLSのセッション確立までの過程です。 SSL/TLSのセッションは、必ずハンドシェイクから始まります。
公開鍵と秘密鍵を使うところでは、公開鍵暗号方式のRSA、楕円曲線暗号などの暗号が使われます。
セッションが確立したら、セッション キー(共通鍵)を公開鍵暗号方式のDES、AESなどの暗号が使われます。
SSLによるクライアントとWebサーバ間の通信手順の概要になります。
たとえばA社のWebサーバにPCからTLSを用いたアクセスの場合、、 該当PCがサーバ証明書を入手した後に、認証局の公開鍵を利用してサーバ証明書の正当性を、認証局の公開鍵を使って検証します。
平文から始まり、SSLサーバ証明書を検証し、通信しているサーバーが正しいサーバーかの検証を行います。 サーバーが認証されると、プリマスタシークレットの交換、セッションキー(共通鍵)の共有の手順に進みます。
なお、サーバーがクライアントを認証する場合は、クライアント証明書を利用してクライアント認証が行われる場合もあります。
※1 サーバ証明書の正当性を確認する際に使用するものなので認証局の公開鍵になります。
※2 共通鍵生成用データを暗号化する際に使用するものなのでWebサーバの公開鍵になります。
公開鍵暗号方式と共通鍵暗号方式については以下にまとめています。
公開鍵暗号方式とは、英語でPublic Key Cryptography。 公開鍵と秘密鍵の対になる2つの鍵を使ってデータの暗号化/復号化を行う暗号方式です。 秘密鍵やRSAなどの代表的な暗号の例についてまとめています。
共通鍵暗号方式とは、英語でCommon key cryptosystem。暗号化と復号に同じ鍵を用いる方法です。 共通鍵暗号方式の特徴と、ブロック暗号のDES、AES、ストリーム暗号のKCipher-2などの代表的な暗号の例についてまとめています。
以下は、ホームページなどでSSLサーバ証明書を申し込んでhttpsで表示する場合を想定したイメージです。 クライアント証明書を使わない場合のSSL/TLSのハンドシェイクの例と解説になります。
クライアントからのSSL/TLSの接続要求に対し、Webサーバが証明書を送付します。
手順の詳細は次の通りです。
クライアント側が保持している認証局の公開鍵でサーバ証明書の正当性を確認します。
クライアントが共通鍵生成用のデータを作成して、サーバ証明書に添付されたWebサーバの公開鍵で共通鍵生成用データを暗号化しWebサーバ側に送付します。
手順の詳細は次の通りです。
Webサーバが自分の秘密鍵で暗号化された共通鍵生成用データを復号します。
クライアントとWebサーバで同一の共通鍵生成用データによって共通鍵を作成し、以降この共通鍵による暗号化通信を行います。
httpsで表示できただけで満足すると落とし穴があります。 SSL/TLS導入サイトの7割が設定ミスしているといわれることがあります。 ブラウザで警告を受けてしまったり、そもそも設定ミスでSSL/TLSの目的が果せていなかったということがあります。
SSLサーバ証明書を発行元などが提供している以下のようなSSLの設定の確認が行えるサイトがあります。 試してみましょう。以外に多くのホームページでA+評価になっていないです。
https://www.ssllabs.com/ssltest/index.htmlでサーバのSSL関連の設定が診断できます。
NginxでSSL LabsでA+評価する設定例を以下にまとめています。
例えば、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でした。
利用している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)で解決。
Apache2.4でSSL LabsでA+評価する設定例を以下にまとめています。
例えば、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を設定する例について見ていきます。
更新ツールのインストールします。
媒体は「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 <通知メールアドレス>
証明書は「/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を再起動します。
sudo systemctl restart httpd
以下ではSSL/TLSに関連したIPA情報処理試験の過去問とその解説をまとめています。
SSHとは、Secure Shellの略で、 リモートログインやリモートファイルコピーのセキュリティを強化したプロトコル、 及びそのプロトコルを実装したコマンドのことをいいます。
TCP層とアプリケーション層で暗号化を行う方式で、セッションごとに異なる暗号かぎを生成して使用します。 暗号化アルゴリズムとして、Triple-DES、AES、Blowfish、Arcfourなどが用意されています。 パスワードを用いた認証の他に、公開鍵暗号を用いたRSAなどが使用可能です。
以下ではSSHに関連したIPA情報処理試験の過去問とその解説をまとめています。
S/MIMEとは電子証明書を使用して、メールソフト間で電子メールを安全に送受信するための規格です。読み方や意味、暗号方式などS/MIMEについて説明しています。
情報セキュリティとは何か、情報セキュリティのテキストコンテンツをテーマに知識をまとめています。またIPAの情報処理試験の情報セキュリティ関連の問題も解説しています。
情報処理試験対策用のサイトオリジナル教科書をテーマにテクノロジ系の知識をまとめています。
Copyright (C) 2010-2023 情報処理のWeb教科書. All Rights Reserved. Loarding…