ディジタル証明書の有効性はCRLで確認します。

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : ディジタル証明書の有効性はどうすればわかるのか?

勉強のきっかけになった問題

特定の認証局が発行したCRLに関する記述のうち,適切なものはどれか。

ア. CRLには,失効したディジタル証明書に対応する秘密鍵が登録される。
イ. CRLには,有効期限内のディジタル証明書のうち失効したディジタル証明書と失効した日時の対応が提示される。>> 正解
ウ. CRLは,鍵の漏えい,破棄申請の状況をリアルタイムに反映するプロトコルである。
エ. 有効期限切れで失効したディジタル証明書は,所有者が新たなディジタル証明書を取得するまでの間,CRLに登録される。
平成27年秋期問2 CRLに関する記述|情報処理安全確保支援士.com

CRLは、有効期限内に失効したディジタル証明書の一覧です。

  • 英語 : Certificate Revocation List
  • 日本語 : 証明書失効リスト
  • CRLに書いてあること : 証明書のシリアル番号 と 失効日

CRLとは有効期限よりも前に失効させたデジタル証明書の一覧です。有効期限よりも前に失効させるというのは、例えば証明書の誤発行や証明書の秘密鍵紛失で悪用されるのを回避するための処置です。認証局では、そのような証明書をCRLに登録して管理します。
www.infraexpert.com

認証局が管理する、失効済み電子証明書の一覧。
CRLの仕様は、電子証明書と同様にX.509の規格で決められています。また、CRLにはリストを発行した認証局電子署名を行っているので、電子証明書と同じく偽造はほぼ不可能といえます。
www.geotrust.co.jp

本来のユーザーから失効の申し出があると、認証局はその情報を CRL に追加する。また、デジタル証明書の記載内容が変更されることもある。こういった場合も、認証局に申請すると CRL に加えることができる。
用語解説辞典|【公式】NTTPC

CRLは認証局(CA)から定期的に最新のものが配布されています。CRLの仕様はデジタル証明書の仕様を定めたITU-T X.509で標準化されています。
www.secomtrust.net

有効期限前に失効される理由は色々あるらしいです。

  • 送信データを暗号化する鍵データが入ったパソコンを紛失した >> 誰かが使わないように失効させる
  • 間違って発行してしまった >> 使わないから失効させる
  • 被発行者の規則違反 >> 証明したくないから失効させる

受け取ったデジタル証明書は、CRLを突き合わせて有効かを確認できます。

方法1. CRLファイルをダウンロードして突き合わせて確認します。

CRLファイルを実際に見てみました。

qiita.com

方法2. OCSPというプロトコルを使ってオンラインで確認します。

  • 英語 : Online Certificate Status Protocol
  • 日本語 : オンライン証明書状況プロトコル

OCSP(Online Certificate Status Protocol)は、ブラウザなどのクライアントが、認証局が提供するOCSPサーバーに対して証明書のシリアル番号を問合せ、OCSPサーバーが証明書のステイタスを返すという仕組みです。
rms-digicert.ne.jp

OCSP は、オンラインで証明書の失効情報を確認するためのプロトコルであり、RFC2560 に規定されています。証明書利用者(OCSP リクエスタ)は、OCSP レスポンダ(OCSP サーバーとも呼ばれる)に失効情報を問い合わせます。OCSP レスポンダは、問い合わせに対して証明書の状態 について、有効(good)、失効(revoked)、不明(unknown) のいずれかとして返します
f:id:ponsuke_tarou:20180411213603p:plain
KI関連技術に関するコンテンツ

デジタル証明書の有効性をリアルタイムで確認するプロトコルOCSPサーバはCA自身や、CRLを集中管理するVAが運営する。OCSPクライアントはサーバに対してデジタル証明書を確認させることによって、自力でのCRL取得や照合の手間を省略できる。
e-words.jp

リアルタイムでディジタル証明書の失効情報を検証し、有効性を確認するプロトコル。対象となるディジタル証明書のシリアル番号をVA(証明書有効性検証局)に送信し、有効性の検証結果を受け取る機能を提供する。
OCSP|情報セキュリティマネジメント試験.com

OCSPレスポンダにサーバが問い合わせをしてその応答をキャッシュしておいて、そのキャッシュを基にクライアントに送信する方法をOCSP Staplingと言います。

OCSP Staplingとは、WebサーバーなどのSSLサーバ証明書を提示するサーバーが認証局OCSPレスポンダーに問合せを行い、そのキャッシュされた結果を、証明書とともにブラウザなどのクライアントに提示するという仕組みです。
このキャッシュされた結果は、サーバーとクライアントのTLS/SSLハンドシェイクの過程でCertificate Status Requestとして利用されます。
rms-digicert.ne.jp

OCSP Stapling(ステープリング)では、クライアントがOCSP要求を行うのではなく、サーバがOCSP要求を行い、その応答をキャッシュする。サーバはキャッシュしたOCSP応答を、サーバ証明書と一緒にクライアントに送信する。これによりクライアントはOCSP responderに問い合わせる必要がなくなり、HTTPS通信の開始を高速化することができる。
https://camo.qiitausercontent.com/106767202f346a246a3401a6e435c2dff007cff1/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f353231382f66616361363436622d346533302d656164642d343238612d6437623066303332613433362e706e67

qiita.com

OCSP の問題のひとつは、SSL ハンドシェイク時にウェブサーバとクライアント間の通信に加えて、クライアントが OSCP サーバ
へ通信するという実質 3 者間の通信になっておりこれが SSL ハンドシェイク時のオーバーヘッドになっていることです。OCSP
テープリングは、ウェブサーバがウェブブラウザの代わりに OSCP レスポンダに問い合わせ、SSL ハンドシェイクの際に OCSP
スポンスをクライアントに提供するというメカニズムです。※ 8 これはすでに IETF RFC6066 で定義されています。
f:id:ponsuke_tarou:20180412000041p:plain
https://www.jp.websecurity.symantec.com/welcome/pdf/wp_ssl_handshake.pdf

実際に見てみました。

qiita.com

CRLを集中管理して検証してくれるのはVAです。

  • 英語 : Validation Authority
  • 日本語 : 検証局
  • 別名 : 証明書有効性検証局

認証局(CA)と違い、デジタル証明書の発行は行わず、検証機能に特化しているためこのように呼ばれる。クライアントからの問い合わせに応じて、CAの公開鍵で署名の正当性を検証したり、証明書の有効期限を確認したりする。
e-words.jp

デジタル証明書の有効性を確認する検証機能のみを行うので、証明書を発行する認証局とは区別する意味合いから異なる名称がついています。VAがCRLを集中管理することで無効な証明書にすばやく対応することができます。
www.secomtrust.net

クライアントからのディジタル証明書の有効性に関する問い合わせに対し、署名の検証、有効期限の確認、CRLの確認などを行い、有効性の可否を応答する役割をもつPKIの機関。
VA|情報セキュリティマネジメント試験.com

f:id:ponsuke_tarou:20180411220714j:plain

ディジタル署名の公開鍵を保証するディジタル証明書

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : ディジタル証明書ってどんなもの?

勉強のきっかけになった問題

ディジタル証明書に関する記述のうち,適切なものはどれか。

ア. S/MIMETLSで利用するディジタル証明書の規格は,ITU-T X.400で標準化されている。
イ. ディジタル証明書は,TLSプロトコルにおいて通信データの暗号化のための鍵交換や通信相手の認証に利用されている。 >> 正解
ウ. 認証局が発行するディジタル証明書は,申請者の秘密鍵に対して認証局ディジタル署名したものである。
エ. ルート認証局は,下位の認証局の公開鍵にルート認証局の公開鍵でディジタル署名したディジタル証明書を発行する。
平成29年秋期問10 ディジタル証明書に関する記述|情報処理安全確保支援士.com

ディジタル証明書は、公開鍵暗号方式において公開鍵の正当性を保証するものです。

デジタル署名だけではそもそも配布されている公開鍵が本当に正しい公開鍵(下図ではAさんの公開鍵)なのかを確認することができません。デジタル署名の解析用の公開鍵が正しいことを証明するためにはデジタル証明書を使用します。
www.infraexpert.com

デジタル証明書は、証明したい内容に対して「ハッシュ化」と「秘密鍵による暗号化」を行ったものです。
証明書を信頼できる第三者機関から発行してもらうことで、公的な確認(証明)ができる仕組みです。
デジタル署名とデジタル証明書 CapmNetwork

デジタル署名単独では公開鍵が本人のものであるか確認できないが、デジタル証明書をデジタル署名に付属させることにより、データが改ざんされていないこととともに(この機能はデジタル署名単独で実現できる)、データの作成者を認証局を通して証明することができる。
e-words.jp

ディジタル証明書はTLSプロトコルにおける証明書としても使われます。

インターネット上でのデータの通信を暗号化しプロトコルSSLといいます。

通常インターネット上での通信は「http(HyperText Transfer Protocol)」で行われますが、送受信されるデータは暗号化することができず、盗聴や改ざんを防げません。
しかし、SSLプロトコルを使用することで通信データは暗号化され、第三者が盗み見しようとしても解読することができません。
SSL/TLSとは?基礎知識と活用法|GMOグローバルサイン【公式】

上記のサイトも暗号化されていてURLの先頭は「https」になります。
f:id:ponsuke_tarou:20180408225847p:plain

SSLが進化してTLSができました。

  • 正式名称 : Transport Layer Security
  • 別名 : SSL/TLS
  • インターネットなどのTCP/IPネットワークでデータを暗号化して送受信するプロトコル(通信手順)の一つ。
  • データを送受信する一対の機器間で通信を暗号化し、中継装置などネットワーク上の他の機器による成りすましやデータの盗み見、改竄などを防ぐことができます。
TSLの特徴
  1. TLSは公開鍵証明書による通信相手の認証(一般的にはサーバの認証)
  2. 共通鍵暗号(秘密鍵暗号)による通信の暗号化
  3. ハッシュ関数による改竄検知
TSLの生い立ち
  • 1990年代 : SSL ( Secure Socket Layer ) をNetscape Communications社が開発
  • 1999年
    • IETFTLSワーキンググループが SSL 3.0 を基に TLS 1.0 が標準化される(RFC2246)
    • SSLという名称が既に広く定着していたため、実際にはTLSを指していてもSSLと表記したり、「SSL/TLS」「TLS/SSL」などと両者を併記したりすることが多い。
  • 2006年 : TLS 1.0で発見された新たな攻撃手法への対処など改良を加えたバージョンとして、TLS 1.1がRFC 4346として公開される
  • 2008年 : より安全性の高いハッシュを利用できるようにするなど改良を加えたTLS 1.2がにRFC 5246として公開される
  • 2014年 : SSL 3.0に一定の条件の下で通信の一部が第三者に漏えいする可能性がある「POODLE」が報告される
  • 2015年 : TLS 1.3が提案される

f:id:ponsuke_tarou:20180408213510j:plain

次回の勉強内容

ponsuke-tarou.hatenablog.com

送ったデータの完全性を保証するためのディジタル署名

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : XMLディジタル署名ってどんなん?

勉強のきっかけになった問題

XMLディジタル署名の特徴はどれか。
ア. XML文書中の,指定したエレメントに対してデタッチ署名(Detached Signature)することができる。>>正解
イ. エンベローピング署名(Enveloping Signature)では一つの署名対象に必ず複数の署名を付ける。
ウ. 署名形式として,CMS(Cryptographic Message Syntax)を用いる。
エ. 署名対象と署名アルゴリズムをASN.1によって記述する。
平成28年秋期問4 XMLディジタル署名の特徴|情報処理安全確保支援士.com

ディジタル署名でデータがなりすましや改ざんが行われていないことを証明します。

・ファイルにくっつけるデータだよ
・ファイルの正当性を証明するよ
・誰が作ったかを示すよ
・改ざんされていないことを示すよ
デジタル署名とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

http://sayacafe.sub.jp/sec/pic/DigitalSignature.jpg
ディジタル署名の仕組みと特徴 | 情報セキュリティスペシャリスト試験合格への道

送信者は、メッセージの原文から一定の計算手順で割り出した短いデータを文書に添付して送信する。受信者は受け取った署名データを一定の手順でこれを検証することにより、文書に署名を行ったのが送信者本人であることや、文書が通信途上で改ざんされていないことなどを確認することができる。
e-words.jp

データのダイジェスト値をハッシュ関数で取得して、それを秘密鍵で暗号化します。

データの送信者はまず作成したデータを自分の秘密鍵を使って暗号化するとともに、データのハッシュ値ハッシュ関数によって算出する。ハッシュ値は、元のデータを逆算できないという特殊な値で、算出したハッシュ値を自分の秘密鍵を使って暗号化する。送信者は受信者にあらかじめ公開鍵を渡しておき、暗号化したデータと暗号化したハッシュ値を受信者に向けて送信する。
www.kddi.com

デジタル署名では、データだけでなく、データをハッシュ値にしてからこれを署名として受信者に送信します。受信者は、受信したデータからハッシュ値を算出し、署名として受け取ったハッシュ値と比較することによりデータが改ざんされていないことを確認できます。
www.infraexpert.com

「署名」はハッシュ値を暗号化した値のことです。

デジタル署名を利用する前提として、送信者と受信者の間で公開鍵の入手とハッシュ関数の共有が必要となる。仕組みとしては、送信者はデータの一部分のハッシュ値を計算し、それをあらかじめ入手してある送信先の公開鍵で暗号化する。そして、元データとともにその暗号化したハッシュ値(署名)を送信する。
デジタル署名 − @IT ネットワーク用語事典

メッセージダイジェスト(またはハッシュ値)と呼ばれるデータを暗号化します。メッセージダイジェスト(ハッシュ値)とは、本文より「ハッシュ関数」という一方向関数を用いて抽出したビットデータのことを言います。「ハッシュ関数」という関数を用いると、本文から一定の長さのビット列(0と1の羅列)が抽出されます。ハッシュ関数とは、ビット列から全く異なるビット列と作り出す関数になります。
yamanjo.net

XMLディジタル署名XML要素として署名を付けられます。

  • 英語 : XML digital signature
  • 別名 : XML署名

XMLディジタル署名には、以下の特徴があります。

・署名対象、署名アルゴリズムやメッセージダイジェストおよび証明書などをXMLの文法で表現している。
ディジタル署名XMLタグ付き言語であり分かりやすい。
・任意のデータファイルやXML文書の全体だけではなく、XML文書の一部に対しても署名を付けることができ、部分署名や多重署名などができる。
XML署名で参照する暗号アルゴリズムなどのオブジェクトの識別子は、W3Cなどで定めているURIを参照する。
平成28年 秋期 情報セキュリティスペシャリスト 午前II 問4

署名対象のダイジェスト値(ハッシュ値)を求め、ダイジェスト値を子要素としてXML署名情報要素に入れ、さらにその署名情報要素に対してダイジェスト値と署名値を計算し挿入する。
XMLデジタル署名とXML暗号:Webサービスのセキュリティ(2) - @IT

XML 署名では、XML ドキュメントに埋め込むか、別の方法で XML ドキュメントに関連付けることができる一連の XML 要素を定義します。これによって、受信者は、メッセージが変更されておらず、送信者が意図したとおりのものであることを確認できます。
XML デジタル署名入門

デジタル・コンテンツに対するデジタル署名に署名し、それを検査するための XML 構文および処理規則を定義する仕様です。 この仕様は、World Wide Web Consortium (W3C) および Internet Engineering Task Force (IETF) による共同開発です。
IBM Knowledge Center

インターネット上での情報交換のためのフォーマットとしてXMLが使われるので、XML にデジタル署名を付与するする必要があります。

近年、インターネット上での情報交換のためのフォーマットとして、XML(eXtensible Markup Language)が注目を浴びています。XML は拡張可能なマークアップ言語 [75] であり、テキストファイルでありながら構造化された情報を柔軟に扱うことができます。XML は、HTML の元ともなった SGML から、インターネットでの情報交換に必要な箇所を抽出したサブセットです。

XML 文書に対する改ざん、なりすましを防ぐために、デジタル署名の機能が求められています。現在、XML にデジタル署名を付与するための規格として、W3C (World Wide Web Consortium) において「XML 署名(XML Signature)」の標準化が進められています。XML の署名要件(RFC2807)、XML 署名構文と処理(RFC3075)、XML の正規化 (RFC3076) が RFC として公表されています。
PKI関連技術に関するコンテンツ

XML署名の種別

http://image.itmedia.co.jp/ait/articles/0207/24/r12webserv01.gif
XMLデジタル署名とXML暗号:Webサービスのセキュリティ(2) - @IT

http://www.sc-siken.com/kakomon/28_aki/img/04_2.gif
平成28年秋期問4 XMLディジタル署名の特徴|情報処理安全確保支援士.com

対象データと署名を別々のところに置いとけるのはデタッチ署名です。

署名対象要素と署名要素が独立した署名形式(sibling elements)である。
Detached署名は、署名対象データに任意の電子ファイル(Word、ExcelMPEG画像データ、XML文書など)を指定して、署名対象データをXML署名部分とは独立させ外部ネットワークやローカルファイルに置くことができる。またXML文書内にXML署名要素とXML署名対象要素を並列に配置させることもできる。
XMLデジタル署名とXML暗号:Webサービスのセキュリティ(2) - @IT

Enveloped署名は、複数の人の署名を付けられます。

署名要素が署名対象要素の子要素となる署名形式である。
Enveloped署名は同じ文書に複数人の署名を付けるなどの用途に適している。
XMLデジタル署名とXML暗号:Webサービスのセキュリティ(2) - @IT

エンベローピング署名では署名要素の子要素として対象データを指定します。

署名要素が署名対象要素の親要素となる署名形式である。
Enveloping署名は署名対象要素を包含した形式で、医療のカルテのように初めの医師が署名したカルテに、次の医師が新しく書き添えた部分のみに署名を加えていくような用途に適している。
XMLデジタル署名とXML暗号:Webサービスのセキュリティ(2) - @IT

f:id:ponsuke_tarou:20180408212311j:plain

次回の勉強内容

ponsuke-tarou.hatenablog.com

パラメータと引数の違い

似ているし、意思疎通にはそれほど困らないけど・・・「引数 == パラメータ」ではないです。

パラメータと引数の違い

パラメータは、関数に受け渡されるものの宣言す。

/*
 * pra1とpra2は、パラメータです。
 * JavaDocでも「@param」で説明を書きます。
 */
private void calledMethod(int pra1, String pra2) {
・・・・
}

 ・メソッド(や関数)に定義されているのは「パラメータ」(もしくは「パラメータ変数」)。

 ・メソッド(や関数)に定義されたすべてのパラメータ群は「パラメータ リスト」と呼びます。
blog.masahiko.info

パラメータは、プロシージャが呼び出されるときに期待する値を表します。パラメータは、プロシージャの宣言で定義されます。
パラメータと引数の違い

関数の定義の中で関数に渡す値として定義されている値。
パラメータと引数の違い | 同じと思っていない?

引数は、関数に渡した実際の値のことです。

// arg1とarg2は、引数です。
private void callMethod() {
    int arg1 = 5;
    String arg2 = "五";
    calledMethod(arg1, arg2);
}

・メソッド(や関数)のパラメータに渡された値*1は「引数」(「パラメータ値」との言い換えも可能)。

 ・メソッド(や関数)のパラメータ群に渡されたすべての値群は「引数リスト」と呼びます。
blog.masahiko.info

引数は、プロシージャを呼び出すときに、プロシージャのパラメータに渡す値を表します。呼び出し元のコードは、プロシージャを呼び出すときに引数を渡します。
パラメータと引数の違い

関数を呼び出すときに渡す値。
パラメータと引数の違い | 同じと思っていない?

仮引数と実引数の違い

仮引数は、パラメータのことです。

仮引数とは関数定義時に使用される引数のことである。
仮引数と実引数

http://wa3.i-3-i.info/img/diff/200/df00271-4.png
http://wa3.i-3-i.info/diff271programming.html

www.weblio.jp

実引数は、引数のことです。

実引数とはその関数を実際に使用するときに関数に引き渡される引数のことである.
仮引数と実引数

http://wa3.i-3-i.info/img/diff/200/df00271-5.png
http://wa3.i-3-i.info/diff271programming.html

仮引数と実引数の違いは、パラメータと引数のそれと同じです。

メソッド定義のパラメータ変数のことを仮引数という。
呼び出し側でメソッドに渡すパラメータのことを実引数という。
blog.codebook-10000.com

仮引数も実引数も「~な引数」で理解が難しいです。

仮パラメータと実パラメータの違い

仮パラメータは、パラメータのことです。

実パラメータは、引数のことです。

仮パラメータと実パラメータの違いは、パラメータと引数のそれと同じです。

仮引数も実引数も用語説明があまり見当たらなくてで理解が難しいです。

こんな感じで使われています。

変数パラメータの実引数は仮パラメータと正確に同じ型でなければなりません。
E2033 変数実パラメータと変数仮パラメータとは同一の型でなければなりません (Delphi) - RAD Studio

関数を呼び出すとき、その関数が受け取る引数の数、それぞれの引数の型が一致していなくてはならない。引数の数が一致しないとエラーになる:
[エラー] 実パラメータが足りません
Add 関数は 2 つの引数を受け取るので、引数 1 つでこの関数を呼び出すことはできない。
関数

プロシージャ呼び出し時の実パラメータ・リスト
プロシージャ定義時の仮パラメータ・リスト
パラメータ渡し

まとめ

関数が受け取るものの定義 関数に渡す値
パラメータ 引数
仮引数 実引数
仮パラメータ 実パラメータ

EclipseでTomcatを設定する。

Springを設定していてTomcatを設定していないことに気が付きました。
ponsuke-tarou.hatenablog.com

環境
OS : macOS Hight Sierra v10.13.2
Eclipse : Neon.3 Release (4.6.3)
Mavan : 3.2.5
Spring-webmvc : 5.0.4
Tomcat : 8.0.23
Eclipse Tomcat Plugin : Version 9.1.2

Tomcatは、ava ServletJSP を実行するためのWebコンテナです。

f:id:ponsuke_tarou:20180301224225p:plain

Apache License 2.0を採用したオープンソースソフトウェア。
2005年以降、Apacheソフトウェア財団のトップレベルプロジェクト
のひとつであるApache Tomcat Project 内で開発されている。
それ以前はかつて存在していたJakartaプロジェクト内で開発されていた。
Apache Tomcat - Wikipedia

オープンソースのソフトウェアで、JavaサーブレットJSPを処理するアプリケーションサーバTomcatは単独でWebサーバとして動作することも可能だが、ApacheIISプラグインと動作できるようになっており、実際にはプラグインとしての利用が主流である。
Tomcatは主なUNIX系OSWindowsMac OS Xなどで動作する。Sun Microsystems社からJavaサーブレットJSPのリファレンス実装として認められたソフトウェアで、利用者も非常に多い。
e-words.jp

Webコンテナは、Javaサーブレットの実行環境となるソフトウェアです。

Java EE アーキテクチャのWebコンポーネント規約を実装するソフトウェア。
この規約では、コンピュータセキュリティ、並列性、ライフサイクル管理、トランザクション処理、デプロイやその他のサービスを含むWebコンポーネントの実行環境を規定している。WebコンテナはJava EEプラットフォームAPIを利用したJSPコンテナとしての機能も提供する。
Webコンテナ - Wikipedia

サーブレットはWebサーバ上で動作させるJava言語で書かれた簡易なプログラムで、クライアント(Webブラウザなど)からの要求を受けて処理を行い、結果をWebページとして送信する。サーブレットは単体では動作せず、Webサーバからの処理要求を受け付けてサーブレットの記述に従って実際の処理を行うソフトウェアが必要で、これをサーブレットコンテナという。
e-words.jp

Tomcatをインストールします。

1. サイトからダウンロードします。

  1. Apache Tomcat® - Apache Tomcat 8 Software Downloadsへアクセスします。
  2. 好きなバージョンの.tar.gz をダウンロードして解凍します。
    • f:id:ponsuke_tarou:20180301230312p:plain
  3. 解凍した「apache-tomcat-8.0.23」(バージョンによって末尾は変わる)をApplicationsディレクトリ配下に移動します。
    • f:id:ponsuke_tarou:20180301230429p:plain
  4. Tomcatに権限を付与します。
$ chmod 755 /Applications/apache-tomcat-8.0.23/bin/startup.sh
$ chmod 755 /Applications/apache-tomcat-8.0.23/bin/shutdown.sh

2. Tomcatを起動します。

$ /Applications/apache-tomcat-8.0.23/bin/startup.sh 
Using CATALINA_BASE:   /Applications/apache-tomcat-8.0.23
Using CATALINA_HOME:   /Applications/apache-tomcat-8.0.23
Using CATALINA_TMPDIR: /Applications/apache-tomcat-8.0.23/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Using CLASSPATH:       /Applications/apache-tomcat-8.0.23/bin/bootstrap.jar:/Applications/apache-tomcat-8.0.23/bin/tomcat-juli.jar
Tomcat started.

3. ブラウザで「http://localhost:8080/」にアクセスします。

f:id:ponsuke_tarou:20180301230942p:plain

4. Tomcatを停止します。

$ /Applications/apache-tomcat-8.0.23/bin/shutdown.sh 
Using CATALINA_BASE:   /Applications/apache-tomcat-8.0.23
Using CATALINA_HOME:   /Applications/apache-tomcat-8.0.23
Using CATALINA_TMPDIR: /Applications/apache-tomcat-8.0.23/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Using CLASSPATH:       /Applications/apache-tomcat-8.0.23/bin/bootstrap.jar:/Applications/apache-tomcat-8.0.23/bin/tomcat-juli.jar

EclipseにTomactのプラグインを入れます。

  1. Eclipse Tomcat Pluginへアクセスします。
  2. zipファイルをダウンロードします。
    • f:id:ponsuke_tarou:20180301235556p:plain
  3. [Help] > [Install New Software]を選択します。
  4. [Work with] > [Add...]ボタン > [Archive]ボタン > ダウンロードしたzipファイルを選択 > [OK]ボタン
  5. [Tomcat Plugin]にチェックを入れます。
  6. [Next>]ボタン > [Next>]ボタン > [I accept the........]を選択 > [Finish]ボタン
  7. Eclipseを再起動します。
  8. Tom猫マークが表示されます。
    • f:id:ponsuke_tarou:20180302000344p:plain

EclipseTomcatを設定します。

環境を設定します。

  1. [Eclipse] > [環境設定] > [Tomcat] > [Tomcatバージョン] > [Version 8.X]を選択します。
  2. [Tomcat ホーム] > [Browse...]ボタン > 「/Applications/apache-tomcat-8.0.23」を選択します。
  3. コンテキスト宣言モードを選択します。

f:id:ponsuke_tarou:20180302001451p:plain

「コンテキスト宣言モード」は、コンフィグレーションファイルの選択となります。
「server.xml」を選択すると、\conf\server.xml にアプリケーションコンテキストの設定が更新されます。
「コンテキストファイル」を選択すると、指定したディレクトリ(デフォルトは \conf\Catalina\localhost)にアプリケーションコンテキストの設定ファイル(プロジェクト名.xml)が作成されます。
proenomichi.blogspot.jp

Eclipseに設定されているJavaのバージョンを確認します。

  1. 「Command + ,」キーを押下して[Preferrence]ダイアログを開きます。
  2. [Java] > [Installd JREs]を開いて、インストールしたTomcatに合ったものがdefaultになっていることを確認します。

サーバを追加します。

  1. [Servers]タブを表示してリンクをクリックします。
    • f:id:ponsuke_tarou:20180302002753p:plain
  2. [Apache] > [Tomcat v8.0 Server]を選択して、[Next>]ボタンを押下します。
    • f:id:ponsuke_tarou:20180302002758p:plain
  3. [Tomcat install directory:]の[Browse...]ボタンを押下してTomcatが置いてある「/Applications/apache-tomcat-8.0.23」を指定します。
  4. [JRE:]で「Workbench default JRE」を選択します。
    • f:id:ponsuke_tarou:20180304135740p:plain
  5. [Finish]ボタンを押下すると[Server]にTomcatが追加されます。
    • f:id:ponsuke_tarou:20180302002807p:plain

EclipseでMavenのプロジェクトにSpringを設定する

環境
OS : macOS Hight Sierra v10.13.2
Eclipse : Neon.3 Release (4.6.3)
Mavan : 3.2.5
Spring-webmvc : 5.0.4

Mavenをインストールしてプロジェクトを作成します。

ponsuke-tarou.hatenablog.com

Spring-webmvcライブラリをpom.xmlに設定します。

  1. [Package Explorer]でpom.xmlを選択して開きます。
    • f:id:ponsuke_tarou:20180226230735p:plain
  2. Maven Repository: Search/Browse/Exploreで「spring-boot-starter-parent」を検索して、アイコンを押下します。
    • f:id:ponsuke_tarou:20180312000924p:plain
  3. 好きなバージョンを選択します。
    • f:id:ponsuke_tarou:20180312001003p:plain
  4. pom.xmlに書く内容をコピペします。
    • f:id:ponsuke_tarou:20180312001016p:plain
  5. 同様の手順でpom.xmlに「spring-boot-starter-web」「spring-boot-maven-plugin」を追加します。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.qiitaSample</groupId>
  <artifactId>trySpring</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>trySpring</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <type>pom</type>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-maven-plugin -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.0.0.RELEASE</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>trySpring</finalName>
  </build>
</project>

次は、Tomcatを設定します。

ponsuke-tarou.hatenablog.com

出典

qiita.com

プロバイダの迷惑メール対策にOP25B

前回の勉強内容

前回は、メールを書くときに使うRFC 5322を勉強しました。
ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

インターネットサービスプロバイダ(ISP)が,OP25Bを導入する目的はどれか。

ア. ISP管理外のネットワークに対するISP管理下のネットワークからのICMPパケットによるDDoS攻撃を遮断する。
イ. ISP管理外のネットワークに向けてISP管理下のネットワークから送信されるスパムメールを制限する。 >>> 正解
ウ. ISP管理下のネットワークに対するISP管理外のネットワークからのICMPパケットによるDDoS攻撃を遮断する。
エ. ISP管理下のネットワークに向けてISP管理外のネットワークから送信されるスパムメールを制限する。
平成29年春期問15 OP25Bを導入する目的はどれか|情報処理安全確保支援士.com

メールのざっくりとした流れ

f:id:ponsuke_tarou:20180224131345j:plain

OP25Bとは、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止します。

  • 正式 : Outbound Port 25 Blocking

ネットワークの境界にあるルータなどの機器で、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止することで、インターネットサービスプロバイダなどが会員のパソコンからスパムメールが送信されるのをブロックするために行っています。
e-words.jp

ウェルノウンポートという特定のサービスやプロトコルが利用することが広く知られているポートがあります。

e-words.jp

25番のポートはメール送信において、SMTPでデータを送る際に利用するウェルノンポートです。

SMTPとは、電子メールを伝送するための通信手順の一つです。

電子メールを送信すると、メールはまず送信者のSMTPサーバへ送られます。さらにそのSMTPサーバから受信者のSMTP サーバへ送られ、受信者のメールボックスへ保存されます。インターネットを利用したメールの送受信において、ここまでがSMTPの役割です。
http://www.ocn.ne.jp/support/words/pqrs/SMTP.html

e-words.jp

f:id:ponsuke_tarou:20180226222610j:plain

なんでこんな事するの?

25番ポートの送信を塞ぐことでメールの送信ができなくなります。

クライアント・ソフトウェアからの送信だけでなく、メール・サーバ間での中継でも利用される。そのため、一般的には、認証なしで接続、利用できるようになっている。もしSMTPプロトコルで認証を必須にしてしまうと、任意のドメインからのメールを受け付けることができなくなるからだ。
スパム・メールの送信を制限するOutbound Port 25 Blockingとは − @IT

spamメールやvirusメールは、 しばしば自ネットワーク(ISP)のメールサーバを用いず、 送信先メールサーバのTCP 25番ポートへ直接接続して配送されます。 こういった状況から、 外部のメールサーバへの通信をできなくすることでspamメールやvirusメールの送信が抑止されることを期待するものです。
インターネット用語1分解説~OP25B(Outbound Port 25 Blocking)とは~ - JPNIC

会員がプロバイダのメールサーバでスパムメールを送信しようとする場合は対応できるけれど、外部のメールサーバを利用されると対応できません。

会員がプロバイダのメールサーバでスパムメールを送信しようとする場合は、これを個別に遮断したり会員を退会処分にしたりすることができるが、外部のメールサーバを利用されるとこうした措置を取ることができない。

OP25Bを導入して、外部のSMTPサーバへの通信を遮断することで会員が外部のメールサーバを利用してスパムメールを送るのを防ぎます。

そこで、ネットワークの境界で外部のSMTPサーバへの通信を遮断することにより、会員のコンピュータが外部のメールサーバを利用してスパムメールなどを送ることを根こそぎ防ぐことができる。あくまで外部サーバへの通信を遮断するだけで自ネットワーク内にあるメールサーバへの通信は可能なため、プロバイダのメールサーバを利用した通常のメールの送受信は影響を受けない。
f:id:ponsuke_tarou:20180226222623j:plain

次回の勉強内容

ponsuke-tarou.hatenablog.com