おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

メールの暗号化と電子署名を行うS/MIMEについて勉強してみた

はじめに

S/MIMEについて学習する機会があったので備忘録として残したいと思います。

S/MIMEとは

通常、メールはインターネットを介して送信先へ送られます。
そのため、生のデータを送った場合は第三者からの閲覧が可能になってしまいます。
それを防ぐためにメールを暗号化もしくは電子署名を行う仕組みをS/MIME(Secure / Multipurpose Internet Mail Extensions)と言います。

暗号化

S/MIMEでは、暗号化にハイブリッド暗号方式を利用しています。
※ハイブリッド暗号方式では共通鍵暗号方式と公開鍵暗号方式の両方が使用されています。

暗号化の内容については以下サイトの『S/MIMEによるメールの暗号化の仕組み』の解説がとても分かりやすいです。

S/MIMEとは?メールへの電子署名と暗号化の仕組み|GMOグローバルサイン【公式】

電子署名

S/MIMEでは、電子署名公開鍵暗号方式を利用しています。

暗号化の内容については以下サイトの『メールへの電子署名の仕組み』の解説がとても分かりやすいです。

S/MIMEとは?メールへの電子署名と暗号化の仕組み|GMOグローバルサイン【公式】

注意

S/MIMEではメール本文や電子署名CMS(Crypgraphic Message Syntax)形式で扱うため、CMS形式に対応しているメーラを利用する必要があります。

おわりに

以上、メールの暗号化と電子署名を行うS/MIMEに関する備忘録でした。

【迷惑メール対策】OP25Bについて勉強してみた。

はじめに

迷惑メール対策としてOP25Bについて学ぶ機会があったので備忘録として残します。

OP25B

Outbound Port 25 Blockの略称となります。

通常メールを送る際は外部に公開されているメールサーバを経由しますが、時には迷惑メールの踏み台としてそのメールサーバを利用されてしまう場合があります。

迷惑メールの送信者は契約先がプロバイダの用意したメールサーバを経由せずに手元のPCから直接動的IPアドレスを割り当てられた独自のメールサーバを経由してメールを送ろうとします。

それを防ぐため、契約したプロバイダが用意したメールサーバを経由せずに外部へ送ろうとする通信を弾く仕組みがOP25Bとなります。

具体的にはファイアウォールの設定で、プロバイダが用意したメールサーバからのポート25番宛ての通信(内部⇒外部への通信)は許可し、それ以外からのポート25番宛ての通信は拒否設定にしているという内容になります。

おわりに

以上、簡単ではありますがOP25Bに関する備忘録でした。

参考サイト

以下のサイトがとても分かりやすかったです。

www.dekyo.or.jp

メールヘッダReceivedフィールドについての備忘録

はじめに

メールヘッダフィールドのReceivedについて学習する機会があったので備忘録として残します。

メールヘッダ

メールはメールヘッダと本文で構成されます。
ヘッダフィールドは以下のサイトなどでまとめられています。

メールヘッダの一覧

Receivedフィールド

Receivedフィールドにはメールが転送されるたびに転送元(送信元)、転送先(送信先)が記録されます。
Receivedフィールドを確認することで、どのような経路でメールが送られてきたのかを確認することが出来ます。
(いくつか転送経路がある場合、Receivedフィールドは複数記録されますが、大元の送信元は一番下のReceivedに記録され、送信先に近づけば近づくほど上のReceivedに情報が記録されます。)

実際のメールヘッダの例としては以下のサイトが参考になるかと思われます。

Eメールヘッダ情報の確認方法 | 情報提供のお願い | 迷惑メール相談センター

注意点

Receivedフィールドのfromの後に書かれている値は相手が自由に設定できる値のため、完全に信用できるものではありません。
ただしその値のあとのカッコ内の値については相手のIPアドレスと、そのIPアドレスDNSで逆引きしたホスト名のためにある程度信用できます。

そのため、fromの後の値とカッコ内のホスト名がことなっていた場合はなりすましの可能性があるということです。

おわりに

なかなかメールのヘッダまでを確認する機会は多くないですが、ここら辺もセキュリティ上、覚えておいて損はなさそうです。

電子メールシステムの構成要素について勉強してみた。

はじめに

電子メールシステムの構成要素について備忘録として残します。

電子メールシステム構成要素

電子メールシステムの構成要素は以下となります。

構成要素 説明
MTA 外部へメールを送ったり受信したり中継したりするためのプログラム。プロトコルにはSMTPを用いる(SMTPサーバ)
MDA MTAからメールを受け取り各ユーザのメールボックスに送信するプログラム
MRA ユーザからのメール受信要求によってユーザのメールボックスからメールアプリケーション(MUA)にメールを送信するプログラム
MSA ユーザが送信したメールをMTAへ中継するプログラム
MUA ユーザがメールの送受信に利用するメールアプリケーションソフトウェア

構成図としては以下のサイトにて解説されている図が分かりやすかったです。

メールサーバの用語集 - DENET 技術ブログ

おわりに

以上、電子メールシステムの構成要素についての備忘録でした。

TXTレコードにてDKIM設定を確認する方法

はじめに

TXTレコードにてDKIM設定を確認する方法について備忘録として残します。

DKIMについて

DKIMは配送するメールサーバがメールにデジタル署名を付ける仕組みのことを言います。
SPFレコードと同様、送信ドメインが不正ではないことを示しますが、デジタル署名を行っている点がSPFと異なる部分となります。

DKIMの設定確認

通常、レコードの内容はそれぞれのドメインに設定されますが、DKIMは以下のようなサブドメインに設定されます。

<セレクタ>._domainkey.<ドメイン名>

セレクタは受信側のメールサーバがドメインの公開鍵を見つけるのに必要な情報です。

DKIMはTXTレコードに以下のような形で記載されています。

v=DKIM1; k=rsa; p={公開鍵}

確認するサイトについては王道ですが、以下のサイト等があります。

nslookup(dig)テスト【DNSサーバ接続確認】

おわりに

以上、TXTレコードにてDKIM設定を確認する方法に関する備忘録でした。

AxiosのInterceptorsを用いて共通のリクエスト、レスポンスの前処理を実装する

はじめに

AxiosのInterceptorsを用いて共通のリクエスト、レスポンスの前処理を実装する方法について備忘録を記載します。

Interceptorsについて

利用方法は公式ドキュメントが分かりやすかったです。
Interceptorsを用いることで、各リクエスト、レスポンスの前処理(設定含め)を実装することができます。

Interceptors | Axios Docs

サンプルコード

axios.interceptors.request.use(config => {
    // リクエスト成功時の共通前処理
}, error => {
    // リクエストエラー時の共通前処理
});

axios.interceptors.response.use(response => {
    // レスポンス成功時の共通前処理
}, error => {
    // レスポンス失敗時の共通前処理
});

// 以下の処理におけるリクエスト、レスポンス時に上記(interceptors)で実装した内容が実行される
axios.get('/tests').・・・
axios.post('/tests').・・・

おわりに

以上、AxiosのInterceptorsを用いて共通のリクエスト、レスポンスの前処理を実装する備忘録でした~。

否定演算子(!)を2回使ってundefinedやnull判定を行う

はじめに

否定演算子を2回使ってundefinedやnull判定を行う処理を見る機会があったので備忘録として残します。

サンプルコード

使う場面は少し限られてきますが、例えば三項演算子を用いるときに値がundefinedではないかで条件分岐を行うとします(nullでも同様の動きになります)。
通常なら以下のように書くかと思います。

let a;
const b = a !== undefined
    ? 'not undefined'
    : 'undefined';

上記でも良いのですが、否定演算子を2回利用して(!!)判定することも可能です。

let a;
const b = !!a
    ? 'not undefined'
    : 'undefined';

仕組みとしては以下のような感じとなります。

a = undefined
!a => true
!!a => false

おわりに

そんなに使うことはないと思いますが、いざコード上で見かけたときにもしっかり読み解けるように覚えておこうと思います。