u-ryo's blog

various information for coding...

Category: Certificate

Let's Encrypt

| Comments

Let's Encrypt、 漸く使えるようになりました。 具体的にどうやって使ったらいいんだろう、 と思ってたんですが、結構簡単に使えますねこれ。 素晴らしい、です。 おかげでbotnetのC&C server等でも広く使われるようになったとかってことですが。

ともあれ、 日本語の要諦サイトLet's Encrypt 総合ポータルもあり、 だいぶわかりやすくなってます。

基本的には、

  1. certbot-autogit又はwget https://dl.eff.org/certbot-autoで取得
  2. 認証原理は、
    1. certbot-autoがLet's Encrypt側から指定されたhttp://.../.well-known/XXXXXXにfileを作る
    2. Let's Encrypt側がそのfileをGET、認証
  3. なのでstandalone(certbot-autoが臨時のhttp serverを建て、Let's Encryptからのrequestを受ける)が基本
  4. その間本来のWWW serverを止めねばならないが、止めたくない時は「--webroot」でDocumentRootを指定し、certbot-autoにfileを作らせる
  5. 初回の(というか最後に成功した)command optionsを/etc/letsencrypt/以下に保存しておき、次回以降「renew」commandでは省略可
  6. renewを付けて走らせても、証明書期限が30日を切っていないと発動しない(無理やり更新するには--force-renew optionが必要)
  7. --post-hookも指定して、apacheのreloadを自動化(これはrenewが走らないと発動しない。単純にrenewの終了status codeだと0になるので「&&」で繋ぐだけでは判別不能だった)
  8. 証明書取得がうまく行くと、/etc/letsencrypt/live/someserver.co.jp/以下に各種cert filesのsymbolic linkが作成されるので、/etc/apache2/site-enabled/default-ssl中でSSLCertificateFile等の示す先をここのcert.pem等にする(Apache2.4以上やnginxなら証明書+中間CA証明書にfullchain.pemが使える)

こちとら、apache2 serverを止めたくない状況だったので、

1
$ sudo cerbot-auto certonly --webroot -w /var/www/ -m support@company.co.jp -d someserver.co.jp --agree-tos

(-w: webroot-path, -d: domain, -m: mail address)

更新は、/etc/cron.daily/certbotを作って、

1
2
#!/bin/sh
cerbot-auto renew -q --post-hook 'service apache2 reload'

で良さそうです。sudo chmod a+x /etc/cron.daily/certbotを忘れずに。

certbot-autoは、実行するといきなりapt-get updateしてからpython2.7とか入れるのと幾つかのpackagesをupdateするので注意です。

また、Let's EncryptにしてからSSL Server Testをかけてみると、「Incorrect SNI alerts」というのが出るようになりました。 これは、/etc/apache2/site-enabled/default-ssl<VirtualHost _default_:443>ServerName XXXXXXとすることで解決しました。 cf. SSLテストで”Incorrect SNI alerts”を解決する

command log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
sudo chown root:root certbot-auto
sudo mv -i certbot-auto /usr/local/bin/
sudo certbot-auto certonly --webroot -w /var/lib/tomcat7/webapps/ROOT/ -m ls-support@jmtech.co.jp -d cx4.locationsupporter.info --agree-tos
sudo vi /etc/apache2/sites-enabled/default-ssl
================================================
	SSLCertificateFile /etc/letsencrypt/live/cx4.locationsupporter.info/cert.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/cx4.locationsupporter.info/privkey.pem
	SSLCertificateChainFile /etc/letsencrypt/live/cx4.locationsupporter.info/chain.pem
================================================
echo '#!/bin/sh' > certbot
echo "cerbot-auto renew -q --post-hook 'service apache2 reload'" >> certbot
chmod a+x certbot
sudo chown root:root certbot
sudo mv -i certbot /etc/cron.daily/

Expired Root Cert

| Comments

Fortigateの認証proxy(且つSSLも検閲できるよう間に独自Certをかます)を有効にしたら、 突然見られなくなったサイトが。 DUNS Number検索っていうところなんですけど、 なんでだろー、って調べてったら、とんでもないことが判明。

1
2
3
4
5
6
$ openssl s_client -connect duns-number-jp.dnb.com:443 -showcerts|awk -v b=0 '{if($2~/CERTIFICATE/){b++};if(b==5){print}}END{print "-----END CERTIFICATE-----"}'|openssl x509 -enddate -noout
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
notAfter=Sep 30 18:19:47 2015 GMT

SSL Report by SSL Labs

SSL Report by SSL Labs

SSL Report by SSL Labs

そんな、わざわざ期限切れのRoot CAなんて配んなくっていいのに...

ただ、そういえば、自分もSSL Cert更新時、 中に含めていた中間証明書をそのまま使い回してverifierにかけたら、 中間証明書が古いって言われて慌てて差し替えたことあります。 自分で作ったcertは期限気にしますが、 間に含めたcertsまではあんまり気にしないんですよね確かに。

気持ちは、わかります。