SSL

メールサーバー間の SMTP 通信を暗号化する

メールサーバー間の通信で、TLSを使った暗号化が可能なのは知っていたが、面倒なので放置していた。 が、Gmail などで暗号化通信で送られてきたメールにはその旨記載があったり、世の中も動いてきてるので、今回、対応することにした。 Debian の場合 apt install ca-certificates で、CA証明書を導入しておくことを忘れない。 /etc/postfix/main.cf に以下の行を挿入。 smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_security_level = may smtp_tls_loglevel = 1 FreeBSD の場合 pkg install ca_root_nss で、CA証明書を導入しておくことを忘れない。 /usr/local/etc/postfix/main.cf に以下の行を挿入。 smtp_tls_CAfile = /usr/local/etc/ssl/cert.pem smtp_tls_security_level = may smtp_tls_loglevel = 1 これで、送信時に暗号化通信を行える相手には、暗号化して送信し、そうでない相手には平文で送信するようになる。 共通 次に受信時の暗号化通信だが、メールのヘッダに暗号通信の記録を残すことを含め、main.cf へ次の行を挿入。 smtpd_use_tls=yes smtpd_tls_received_header = yes 無論、SSL 証明書を Let’s Encrypt などから取得して、設定しておくことを忘れない。 以上で対応は終了だった。簡単すぎて拍子抜け。もっと早くに対応しておくべきだった。

StartSSL (3/3)

さて、SSL証明書の請求です。個人認証を受けていない場合は、 サーバー証明書 (1ドメイン。有効期間1年間) クライアント/メールアドレス証明書 (有効期間1年間) 個人認証、企業認証を受けている場合は、 サーバー証明書 (複数ドメイン、ワイルドカード可。個人/企業実在証明付き。有効期間2年間) クライアント/メールアドレス証明書 (個人/企業実在証明付き。有効期間2年間) コードサイン証明書 (個人/企業実在証明付き。有効期間2年間) が請求できます。それでは、ごく一般的なサーバー証明書を例にとって請求方法を説明しましょう。 まず、ドメインの認証を行います。アカウントページの「Validation Wizard」をクリックして、「Type:」から「Domain Validation」を選択して、「Continue」をクリックします。 次に認証を受けるドメイン名を入力します。トップレベルドメインはドロップダウンメニューから選択するようになってます。「.jp」「.co.jp」「ne.jp」などもちゃんとありますので、焦らずに探しましょう。:) 入力したら、「Continue」をクリックします。 認証コードを受信するメールアドレスを選択します。「postmaster@*」「hostmaster@*」「webmaster@*」は認証を受けるドメインのアドレスになります。それ以外に、Whois データベースに記載されている連絡アドレスが表示されます (註: .jp ドメインの場合、whois データベースの読み出しに失敗しているようで、文字化けした意味不明の選択肢が表示されます。ですので、事実上、ドメインメール宛の先の三つのアドレスからしか選べません)。選択したら「Continue」をクリックします。 指定したアドレスへ認証コードを記載した次のようなメールが届きます。 認証コードを入力して「Continue」をクリックします。 これでドメイン認証は完了です。以下のような画面に進みますので、「Finish」をクリックします。 完了後、画面右にある「Domain Validation」の「+」をクリックすると、認証されたドメイン名に緑色のチェックマークが付いているのが確認できます。 なお、個人認証を受けていないと、ドメイン認証の有効期間は30日で、30日ごとに認証を繰り返さなくてはなりません。 次に、証明書の発行請求を行います。アカウントページの「Certificates Wizard」をクリックします。 「Certificate Type:」で「Web Server SSL/TLS Certificate」をドロップダウンメニューから選択し、「Continue」をクリックします。 秘密鍵の作成画面になります。既に秘密鍵を手元で生成済みの場合は、「Skip」をクリックします。ここで秘密鍵を作成する場合は、パスワードを入力し、鍵長を「2048 (Medium)」「4096 (High)」のいずれかから選択して「Continue」をクリックします。パスワードを忘れるとサーバーが暗号化できなくなったり、証明書の更新に必要な CSR (証明書署名要求) を作成できなくなってしまいますので、忘れないように気をつけて下さい。また、鍵長は「2048」でも問題ありませんが、よりセキュリティを高めたいと思われるのでしたら「4096」を選びます。 秘密鍵を作成するならここで確認を求められますので、「OK」をクリックします。 少し時間がかかりますが、秘密鍵が作成され、次の画面に進みます。画面中央のテキストエリアに表示されている内容を一切の変更を加えないように注意してコピーし、テキストエディタなどにペーストしてファイルに保存します。この秘密鍵は暗号化されており、実際にサーバーにインストールして運用する際に、秘密鍵を作成した時に入力したパスワードが必要になります。ただ、通常はサーバーの起動ごとにパスワードを入力するのは面倒なので、暗号化を解除した秘密鍵をインストールすることも少なくありません。もちろん、秘密鍵の暗号化を解除する際にもパスワードが必要です。 秘密鍵を保存したら、「Continue」をクリックして次の画面に進みます。証明書を作成する認証済みドメインを選択して、「Continue」をクリックします。 証明書が必要なサーバーのサブドメインを入力します。サブドメインのないドメイン名だけの証明も自動的に加えられますので、特にサブドメインが必要でなくても何か指定しておきます。入力したら「Continue」をクリックします。 証明書に含まれるサーバー名の確認画面が表示されます。サブドメインのないサーバー名も証明書に含まれることがわかります。間違いがなければ、「Continue」をクリックします。 個人認証・企業認証済みであれば、すぐに証明書が表示されますが、そうでなければ、次のような画面が表示されます。 要は「内容を確認するからメールで知らせるまでちょっと待て」ということです。ほとんどの場合、三時間以内に次のようなメールが来ます。 メールが届いたら、アカウントページの「Tool Box」をクリックし、左側に表示される「Retrieve Certificate」をクリックします。すると次のような画面に進みますので、証明書を作成したサーバーを選択して「Continue」をクリックします。 中央のテキストエリアに表示されているのが証明書です。*内容を一切の変更を加えないように注意してコピーし、テキストエディタなどにペーストしてファイルに保存します。 あとは秘密鍵と一緒にサーバーへインストールするだけです。お疲れ様でした!

StartSSL (2/3)

さて、アカウントが開設されたので、個人認証を申し込むこととします。個人認証には、以下のものが必要です。 最近の写真がある公的機関の証明書を二種類 支払いのためのクレジットカード (Visa, MasterCard, American Express) または Paypal アカウント 写真がある公的機関の証明書といえば、代表的なものはパスポートと運転免許証、あるいは写真付き住基カードでしょうか。運転免許証と健康保険証でも認証してもらえた例もあるようなので、二種類とも絶対に写真が必要というわけでもないようです。「免許証とか日本語だけど大丈夫なの?」と思われるかもしれませんが、大丈夫です。 私はパスポートと運転免許証で認証してもらいました。その場合は、以下のものを用意します。なお、画像の大きさは 800×600 以下で、かつサイズも 1MB 以下でなくてはなりません。画像のフォーマットは、一般的なフォーマット (PDF, PNG, JPEGなど) で問題はありません。 パスポートの表紙をスキャンまたはデジカメで撮影した画像 パスポートの最初のページをスキャンまたはデジカメで撮影した画像 パスポートの顔写真が掲載されているページをスキャンまたはデジカメで撮影した画像 運転免許証の表および裏をスキャンまたはデジカメで撮影した画像 準備ができたら、まず支払い方法 (クレジットカードまたは Paypal アカウント) を登録します。StartSSL のアカウントページにログインして、「Tool Box」と書かれたタブをクリックします。すると左側にメニューが表示されますので、その中の「Add Credit Card」をクリックします。 すると、カード情報を入力する画面に進みますので、クレジットカードの場合はカード種別を「Visa, MasterCard, American Express」のいずれかから選択してカード情報を入力します。Paypal 払いの場合は、カード番号の欄に Paypal アカウントのメールアドレスを入力し、後は空欄のままにします。入力したら「Continue」をクリックします。 無事登録できれば以下のような画面が表示されます。これで支払い方法の登録は完了です。 さて、ここからが本番。個人認証の請求です。StartSSL のアカウントページの「Validation Wizard」と書かれたタブをクリックします。 中央の「Type:」欄のドロップダウンメニューから「Personal Identity Validation」を選択して「Continue」をクリックします。 必要な資料と費用に関する注意書きが表示されます。内容をよく確認して「Continue」をクリックします。 次に認証レベルの選択画面が表示されます。「Personal Class 2 (Basic)」となっていることを確認して「Continue」をクリックします。なお、選択肢には「Personal Class 3 (Reserved)」もありますが、これは StartCom の従業員や出資者、ビジネスパートナーなどに行われる特別な認証なので、選択してはいけません。 次に資料画像のアップロード画面に進みますので、用意してあった画像をここですべてアップロードします。「選択」ボタンをクリックして画像ファイルを選択すると自動的にアップロードされます。すべてのファイルをアップロードするまで「Continue」をクリックしてはいけません。 すべての画像をアップロードしたら、「Continue」をクリックします。これで完了…と言いたいところですが、実はこれで終わりではありません。イスラエルの現地時間にもよりますが、早ければ数分以内に遅くても数時間以内に担当者から電話がかかってきます。認証を申し込んだのは本当に本人か、認証内容に間違いはないかなど簡単な質問ですので、それほど時間はかかりません。私の場合は、実は最初電話が繋がらないというメールが届いて、続けて、電話を契約している証拠として最新の請求書 (のスキャン画像) を送付するようメールが届きました。もちろん送ったのですが、どうやらかけ間違いであったらしく、それから30分ほどしてから電話がありました。 電話があってほどなく費用の請求メールが届き、私は支払いを Paypal にしていたので、Paypal からも請求メールが届いたのでそれで支払いをしました。支払い後、15分ほどで領収メールが届き、それからさらに五分後に認証完了メールが届きました。 アカウントページ右側の「Identity Card」の「+」記号をクリックすると認証内容が確認できます。こんな感じです。
Read more

StartSSL (1/3)

StartCom Linux というディストリビューションも開発しているイスラエルの StartCom が認証局として発行している証明書が、StartSSL 証明書です。昨年秋に Windows の証明書ストアにルート証明書が登録されたことにより、Internet Explore にも対応を果たしました。 通常、SSL証明書というのは、発行申請ごとに認証を受けるのですが、StartCom は、証明書の発行プロセスと認証プロセスを完全に分離し、個人認証、組織認証について課金するというモデルをとっています。個人認証が、350日で $49.90-。組織認証も 350日で $49.90- (ただし、組織認証を受けるためには代表者または担当者が個人認証を受けている必要があります)。EV 認証は、やはり 350日で、$199.90 (組織認証とEV証明書1回分を含みます)。一度認証をうければ、その間、証明書はワイルドカード証明書を含めて発行し放題です (EV証明書だけは一回につき $49.90 必要です)。ここ以外では一番安いと思われる RapidSSL のワイルドカード証明書でも、年 $149 (日本だと年14800円) することを思えば、これは破格の安さではないでしょうか。しかも証明書は二年間有効です。 認証? またそれは面倒な。と思ったあなた。大丈夫です。もし、SSL証明書が必要なドメインがひとつだけでしたら、認証は必要ありません。しかも認証が必要ないということは課金がありませんから、つまりタダで SSL証明書が入手できます。この場合、証明書の有効期間は一年間になります。 さて、安いとか無料ということになると、気になるのはブラウザの対応具合ですが、基本的に、Windows の証明書ストア、Mac のキーチェーンを使用するブラウザは問題ありません。具体的には、Internet Explore とか、Safari とか。Firefox は独自の証明書ストアを持っていますが、既に登録されているのでこれまた問題ありません。ブラウザ別に見ると、 Internet Explore を含む、Windows 証明書ストアを利用するブラウザ Safari を含む、Mac OS X キーチェーンを利用するブラウザ Firefox Opera Camino Flock Google Chrome Konqueror SeaMonkey Android iPhone となります。何か抜けてますね。そうなんです。Opera は対応してないんですよ。となると、Opera 自体のシェアはともかく、広く公開するサイトには二の足を踏んでしまう人も少なくないのではないでしょうか。でもまあ、ある程度対象が限定 (知人親族だけが対象とか) されるサイトなら、問い合わせがあるのを前提で使用してみる価値はあると思います。あるいは、Opera は無視、というポリシーでいくとか。いつの間にやら Opera に対応して隙がなくなってますね。(2010/10/6 修正) ^^; では、実際の請求方法をご説明しましょう。実は「Quick Lane」という、 SSL証明書を手早く発行して貰うためのショートカットプロセスもあるのですが、どっちにしてもアカウントは作成されることと、個人認証まで行う場合はそれではだめなので、ここでは通常の登録方法を紹介することとします。
Read more

SSLでネームベースのバーチャルホスト

某所にある Apache WebサーバのSSLモジュールを OpenSSL から、GnuTLSへ変更しました。何のためにそんなことをしたかというと、タイトル通り、SSLでNamed Virtual Hostを有効にするためです。 そんなことできんの? SSLってIP1個につき、1ホストじゃないとできないんじゃないの? と思ったあなた、そんなことはありません。知ってるよ。ワイルドカード証明書でしょ? でもあれ高いんだよね−。と思ったあなた。違います。ワイルドカード証明書のことではありません。IPアドレス1個で、全く関係のないドメインがバーチャルホストできるんです。え? 知ってる? おまえが遅れてるだけ? すいません。最近、サーバ関係は手を抜いてるもんで。^^; そもそも私がこれを知るきっかけになったのは、Postfix メーリングリストにドメイン名の変更に当たり、二つのドメインを同時にSSLで受け付けられないかという質問が投げられたことにありました。で、その回答中に、複数のドメインをひとつの証明書にいれてもらう = subjectAltName を使用するというのがあったんです。 subjectAltName? そんな属性がSSLにあるんかいな、とググったところ、SSL・サーバ証明書の発行と認証 CSPSSLというページを発見。おおーっ。確かにある。で、さらにググったところ、まっちゃ139というサイトで勉強会に使用したというプレゼンページを発見。凄いわかりやすくて勉強になりました。ありがとうございます。まっちゃ139さん 詳しくはそちらをご覧頂くとして、SSLでもNamed Virtual Host が可能。ちゃんとRFCにもなってて、ワイルドカード証明書よりスジがいいってこともわかりました。そういえば、GoDaddy でも、Multiple Domains SSL売ってたなぁ、あれもこれ使ってるんだとか思ったり。:P ですが、subjectAltName では、それ用のSSL証明書が当然のことながら必要です。これが悩ましい。というのも、実は私、SSL証明書を四通持ってるんです。うち、二通はしまいっぱなし。いや、以前は使ってたんですが、IPアドレスをいくつも持ってるのが経済的に厳しくなって、サーバを解約しちゃったものですから、余ってたんですね。もったいない。そこへIP増やさなくてもSSLで使えるかもってんですから飛びついたんです。でもまあsubjectAltNameはそういうものでした。しかし! 天は我を見放さなかったのです! (大袈裟) SNI (Server Name Indication) であれば、証明書を無駄にせずにすむ! IE6は対応してないみたいだけど、今時そんなブラウザ使ってるやつぁ無視! マイナーどころのブラウザについては、RFC追っかけてちゃんと作ってれば動く! 動かないのは使ってるやつの運が悪いだけ! (笑) というわけで、この方法でいってみようと決心したわけです。  ところがどうも、Apache 標準の mod_ssl は、パッチを当てないといかんらしい。ディストリビューションに取り込まれてないパッチはちょっと当てたくないなぁと思い、その必要がない、GnuTLS + mod_gnutls でいくことに決めたわけです。mod_gnutls は、セキュリティホールが去年報告されたようなのですが、最新版ではちゃんと対応されてるので、問題なしと判定。ビルドしてインストールしました。サンプルについてた設定ファイルのキーワードが間違ってて、小一時間悩みましたけど、無事起動。そして、手持ちのSSL証明書を全部インストールして、Apache を再起動。おそるおそるそれぞれにアクセスしてみると… やったよ! うまくいったよ! (当たり前) Safai対応してるって書いてるサイト、あんまりなかったけど、普通に見えるよ! ということで、どうやったかを書くと tips として役に立つと思うんですが、なんせセキュリティがらみなもんで、具体例はちょっと…インストールの手順はまた後日ってことで。