2016年5月21日土曜日

Qualys SSL Server Testでレートを Aプラスにする


Qualys SSL LabsのSSL Server Testで、A評価を得てみる。


環境

  • OS: Amazon Linux 2016.03
  • Webサーバ: Apache 2.4.18
  • OpenSSL: 1.0.1k
  • サーバ証明書: Let's Encrypt(certbot)



デフォルト設定
SSLProtocol all -SSLv3
SSLHonorCipherOrder on

B
This server accepts RC4 cipher, but only with older protocol versions. Grade capped to B.


SSLCipherSuiteも指定(コメントアウトされている推奨?設定+RC4も禁止)
SSLCipherSuite HIGH:MEDIUM:!RC4:!aNULL:!MD5

A


HSTSを追加
Header always set Strict-Transport-Security "max-age=15768000"

A+
HTTP Strict Transport Security (HSTS) with long duration deployed on this server.


さらにProtocol Supportを満点にするには、TLS1.2のみにすればOK。
Key ExchangeとCipher Strengthを満点にするには?SSLCipherSuiteをきちんと指定する??



参考



certbot (Let's Encrypt)を Amazon Linuxにインストール


以前一度挫折した(古いAmazon Linuxをアップデートして使っているためだと思われる)が、certbotに改名後に試してみたら、できた。


前提

  • gitはインストール済み
  • WebサーバはApache



手順

  1. sudo easy_install pip
  2. sudo pip install --upgrade pip
  3. sudo /usr/local/bin/pip install --upgrade virtualenv
  4. (作業用ディレクトリで)
    git clone https://github.com/certbot/certbot
  5. cd certbot
  6. ./certbot-auto certonly --webroot -w /var/www/html -d ドメイン名 --agree-tos -m メールアドレス --debug
  7. /etc/httpd/conf.d/ssl.confの下記箇所を変更する。(Apache2.4.8より前のバージョン場合は微妙に違うので参考サイト参照。)
    SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
  8. httpdを再起動


証明書の自動更新
証明書の期限は90日なので、cronで定期更新させる。cronがメールを飛ばすように設定してあれば結果がメールで来る。

(例:月に1回更新する場合。日時は月初にすると混雑しそうなので、適当にずらした方がよいかも。)
45 3 12 * * ./certbot/certbot-auto renew && sudo service httpd reload

期限まで30日以上ある場合は更新されない。それでも更新したい場合は--force-renewオプションを付ける。
上記例を試した時はまだ更新されなかったので、本当にこれでよいかはその日が来てから確認する。(--debug無しとか大丈夫か?タイミングによっては、月イチだと期限切れになるケースがあるかも?)


備考的な

  • Aapcheは停止しなくても大丈夫。(webrootオプションを使う場合はいいらしい。)
  • 証明書生成時にポート443は開いてなくても大丈夫。
  • /var/www/htmlに.well-knownディレクトリが残る。消してもいいのかな?



さよなら自己署名!さよならオレオレ証明書!


参考



2016年5月1日日曜日

シマンテックのクロスルートなサーバ証明書が使えなくなる?

2016年4月のマイクロソフト社のルート証明書情報更新の影響と対策に関するご案内(続報) | Symantec

意訳
Microsoftが2016年4月19~20日(日本時間)に配信するルート証明書情報の更新により、シマンテックのクロスルートを付けているサーバ証明書を使っている場合にWindows上の(Firefox以外の)ブラウザで警告が出るようになる。
回避するにはクロスルートを外す。


このMicrosoftの更新はWindows Updateとは別らしい。
なお、4/19~20となっているが4/20になってMicrosoftが更新を延期したらしい。(結局、4/26~27に実施。)


クロスルートを外すと、ガラケー等で使えなくなるのでは?

クロスルート設定用証明書の設定について、どのような対応が必要でしょうか? | Symantec のPDFによると、ガラケーへの影響は2機種のみ。スマホでもいくつか影響があるが、発売が2010年以前なので影響は少なそう。SHA-1を切り捨てたことにより、既に古いガラケーの多くはSSL/TLSの対象外になっていた。

ちなみに、 Windowsが遂にSymantecG1ルートを捨てるらしい - 情緒不安定。 によるとクロスルート証明書のIssuerが問題なので、中間CA証明書(クロスルートを含む)自体がG1でなくても影響がある。(シマンテックがクロスルート証明書として配布している VeriSign Class 3 Public Primary Certification Authority - G5 のIssuerがG1なので。)


クロスルートを付けている場合に問題が発生するクライアントPC(Windows)の条件を見ると、

条件3 : クライアント環境のルート証明書ストア(Windows Trusted Root Store)に、G5ルート証明書*2が含まれていない場合
*2「VeriSign Class 3 Public Primary Certification Authority - G5」
とある。

おのれSSL!謀ったな・・!! | ツチノコブログ によると、
最近のブラウザではPC/スマフォ問わずにG5証明書が予めインポートされています。ですがwindowsXPのSP2以前やフィーチャーフォンの一部端末はG5証明書がインポートされておらず、『VeriSign Class 3 Public Primary CA』(通称:G1証明書)がインポートされています。

【追記有(2016.04.22)】Windowsが遂にSymantecG1ルートを捨てるらしい - 情緒不安定。 でも、
SymantecG5ルート証明書が入っていないパソコン。
つまり、レガシーなパソコンです。(WindowsXP以前、WindowsUpdateなどを定期的に行ってないと怪しいです。)
とあるので、Windows Vista以降は大丈夫?

でも 2016年4月のマイクロソフト社のルート証明書情報更新の影響と対策に関するご案内(続報) | Symantec によると、XP以降はG5証明書が初期状態ではインストールされていなくて、必要になったらインストールされるらしい。インストールされていない状態でシマンテックのクロスルートに当たると、G1の方を読んでしまうのでエラーになってしまう。


HTTPS セキュリティ証明書における SHA-1 から SHA-256 へのハッシュアルゴリズムの変更について によると、クロスルート無しでクライアント(接続元)がJavaの場合、
1.4.2 より前 → 接続できない
1.4.2 ~ 1.6.0_18 → ごにょごにょしてG5をCAストアに追加すれば接続できる
1.6.0_19 以上 → 接続できる

Java SE 6 Update 19 Release Notes. から Bug ID: JDK-6904162 Add new VeriSign root CA certificates to JRE and remove some old/unused ones を見ても、「verisignclass3g5ca」とあるので6u19でG5が追加されたようだ。


シマンテックによるG5のテストサイトは Symantec SSL test (中間CAがクロスルート無しの「Symantec Class 3 EV SSL CA - G3 」で、そのIssuerがG5。)

2016年1月9日土曜日

EC2の MySQLを S3にバックアップする方法(世代管理付き)


S3への送信はaws-cliが良さそう。
参考:aws-cli - AWS CLIでS3を操作する - Qiita


aws-cliはAmazon Linuxなら最初から入っているが、手元のインスタンスはconfigure等をするにはバージョンアップが必要だった。
yumでもバージョンアップできるが、今回は諸事情により依存関係のある諸々をそっとしておきたかったので、下記を参考にyumを使わずにaws-cliをバージョンアップ。

参考:AWSCLIで運用検討中の人必見! AWSCLIを使用したS3へのファイルコピー | クラウド工房 Powered by Amazon Web Services

sudo easy_install pip
sudo pip install awscli -U


IAMでS3のみに権限を絞り込んだユーザーを作り、その認証情報をconfigure。(もう少し権限を絞っても良いかも。)

aws configure

AWS Access Key ID [None]: (アクセスキーを入力)
AWS Secret Access Key [None]: (シークレットアクセスキーを入力)
Default region name [None]:
Default output format [None]:


世代管理はS3の機能であるバージョニングとライフサイクルを使う。
S3でバケットを作成し、バージョニングを有効化。
ライフサイクルでルールを追加。(例「以前のバージョン」を30日後に削除)


後は適当にダンプとS3へのコピーのスクリプトを作ってcronに登録する。
分かりやすいようにディレクトリを作成し、そこにスクリプトを作った。

バックアップ用スクリプト作成。
vi backup.sh

#!/bin/sh
echo "START " `date +'%Y/%m/%d %H:%M:%S'`
MYSQL_PWD='MySQLのパスワード' mysqldump -u MySQLのユーザー 対象DB > data.dump
aws s3 cp data.dump s3://バケット名/
echo "E N D " `date +'%Y/%m/%d %H:%M:%S'
(パスワード直書きにしたが、きちんとやるならMySQLのパスワードは隠したい。)

スクリプトのファイルに実行権限を付ける。
chmod 700 backup.sh

cronに登録。
crontab -e

0 1 * * * cd /スクリプトのディレクトリ; ./backup.sh >> history.log


aws-cliを使うと、AWSのサービス間の通信はSSL(TLS?)で暗号化されるようだ。
参考
aws — AWS CLI 1.9.17 Command Reference
By default, the AWS CLI uses SSL when communicating with AWS services.

Amazon Web Service aws cliはデフォルトで暗号化通信されるのか? - なぜか数学者にはワイン好きが多い



S3を使わずにサーバ上で世代管理するだけなら、下記が一番分かりやすかった。
mysqldumpをcronで1日1回取得し、バックアップ用ファイルを保存する - サイト制作の豆知識

2015年12月6日日曜日

jsDelivrから 最新の各種JavaScirpt / CSSフレームワークを読みこむ URL

jsDelivrから最新のJavaScirpt/CSSフレームワークを読みこむURLのメモ。

下記の「短縮形」は本来は複数ファイルをまとめる機能だが1ファイルでも使える。(URLが短くなり、キャッシュ期間が長くなる。)


■ jQuery

https://cdn.jsdelivr.net/jquery/latest/jquery.min.js
短縮形 https://cdn.jsdelivr.net/g/jquery

v3.0.0-alpha1

https://cdn.jsdelivr.net/jquery/2/jquery.min.js
短縮形 https://cdn.jsdelivr.net/g/jquery@2

v2.1.4

https://cdn.jsdelivr.net/jquery/1/jquery.min.js
短縮形 https://cdn.jsdelivr.net/g/jquery@1

v1.11.3


■ jQuery UI

CSS
https://cdn.jsdelivr.net/jquery.ui/latest/jquery-ui.min.css

JS
https://cdn.jsdelivr.net/jquery.ui/latest/jquery-ui.min.js
短縮形 https://cdn.jsdelivr.net/g/jquery.ui

JSをjQuery(v2.X)と合わせて1ファイルにする
https://cdn.jsdelivr.net/g/jquery@2,jquery.ui

CSSでテーマを指定する場合
https://cdn.jsdelivr.net/jquery.ui/latest/themes/flick/jquery-ui.min.css
テーマを指定しないと"UI lightness"になる(参考:http://jqueryui.com/themeroller/#themeGallery


■ jQuery Mobile

CSS
https://cdn.jsdelivr.net/jquery.mobile/latest/jquery.mobile.min.css

JS
https://cdn.jsdelivr.net/jquery.mobile/latest/jquery.mobile.min.js
短縮形 https://cdn.jsdelivr.net/g/jquery.mobile

JSをjQuery(v2.X)と合わせて1ファイルにする
https://cdn.jsdelivr.net/g/jquery@2,jquery.mobile


■ Bootstrap

CSS
https://cdn.jsdelivr.net/bootstrap/latest/css/bootstrap.min.css

JS
https://cdn.jsdelivr.net/bootstrap/latest/js/bootstrap.min.js
短縮形 https://cdn.jsdelivr.net/g/bootstrap

JSをjQuery(v2.X)と合わせて1ファイルにする
https://cdn.jsdelivr.net/g/jquery@2,bootstrap


■ Bootswatch


https://cdn.jsdelivr.net/bootswatch/latest/cerulean/bootstrap.min.css
テーマもたくさん → https://www.jsdelivr.com/?query=bootswatch


■ Pure.css

https://cdn.jsdelivr.net/pure/latest/pure-min.css
短縮形 https://cdn.jsdelivr.net/g/pure


■ Normalize.css

https://cdn.jsdelivr.net/normalize/latest/normalize.min.css
短縮形 https://cdn.jsdelivr.net/g/normalize


■ Font Awesome

https://cdn.jsdelivr.net/fontawesome/latest/css/font-awesome.min.css
短縮形 https://cdn.jsdelivr.net/fontawesome/latest/css/mainfile

https://cdn.jsdelivr.net/g/fontawesome だとうまく表示されなかった。(フォントファイルへの相対パスがおかしくなる?)



ブラウザキャッシュ期間は1週間。
ただし、複数ファイルをまとめると max-age=15724800(約6ヶ月)になった。


【HTTP Response Header(抜粋)】

Server: nginx
Content-Type: application/x-javascript; charset=utf-8
Vary: Accept-Encoding
X-Version: 3.0.0-alpha1
Cache-Control: public, max-age=604800
access-control-allow-origin: *
X-Cache: HIT
x-edge-location: jptk
Content-Encoding: gzip
X-Firefox-Spdy: h2



ファイル名は"mainfile"でも代替可。minのJSまたはCSSになる。



参考:パブリックなCDNはjsdelivrかcdnjsでいいじゃん。 | Sorry for Team KILLing

ブログ アーカイブ

tags