Let's Encrypt

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

Let's EncryptでSSL

パブリックベータになりクローズドベータとは
やり方が異なるので、まとめてみます。

パブリックベータが終わり正式版になったようですね。
バージョンは2016年4月19日現在0.5.0のようです。

また、Fedora23以降はrpmに対応しているので、dnf -y install letsencryptでさくっとインストールできます。

gitが入ってれば後は勝手にやってくれそうですが、
足りなければ随時dnf等で必要なパッケージをインストールしてください

インストール

今のところは至って簡単です。 cd /usr/local/src/ git clone https://github.com/letsencrypt/letsencrypt 以上

事前準備

後述の手順のために秘密鍵を作っておきます。

/usr/bin/openssl genrsa -aes128 2048 > /etc/pki/tls/private/examplekey.pem

発行してみる

これもコマンド1つ叩くだけでイイそうです。
とりあえず以下の条件で作成します
・Fedora23 ・Apache 2.4.20 が立ち上がっている状態 ・ドメイン www.example.com ・DocumentRoot /var/www/example.com cd /usr/local/src/letsencrypt ./letsencrypt-auto certonly --webroot -w /var/www/example.com -d www.example.com rpm(dnf)でインストールした場合は-autoがなくなります
これで自動的に/var/www/example.com/.well-known/acme-challengeにごにょごにょして
終わったら/etc/letsencrypt/live/www.example.comにcert.pemとchain.pemと
fullchain.pemとprivkey.pemのシンボリックリンクが作成されます。
これはコマンド実行ごとに/etc/letsencrypt/archive/www.example.comにcert1.pem、cert2.pemと
番号が振られて、それにリンクするようになっているためのようです。

ただし、パブリックベータ期間中だからなのかわかりませんが
多数のサブドメイン(www.example.com, mail.example.com, hoge.example.com等)持っていて
それぞれでコマンドを叩くと以下の様なエラーで弾かれます
追記:netvolante.jpのDDNSでも利用できたので正式版ではこの制限がなくなってるかもしれません!
An unexpected error occurred: There were too many requests of a given type :: Error creating new cert :: Too many certificates already issued for: example.com Please see the logfiles in /var/log/letsencrypt for more details. なので、次の手順で1つの証明書にドメインをまとめるのが良いです。 cd /usr/local/src/letsencrypt ./letsencrypt-auto certonly --webroot -w /var/www/example.com -d www.example.com \ -w /var/www2/example.com -d www2.example.com \ -w /var/hoge/example.com -d hoge.example.com もしくは事前にCSR(DER形式)を作成してそれを使うのも手ですが、
今のところ?HTTPDが立ち上がってると動かせないようなので、止めてからやります。 systemctl stop httpd cd /usr/local/src/letsencrypt cat << EOF > example.com.cnf [req] distinguished_name = dn [dn] [ SAN ] subjectAltName=DNS:example.com,DNS:www.example.com,DNS:mail.example.com EOF openssl req -new -key /etc/pki/tls/private/examplekey.pem -nodes -sha512 -subj "/CN=example.com" -reqexts SAN -out example.com.csr.der -outform der -config example.com.cnf ./letsencrypt-auto -t --csr example.com.csr.der これでそこのディレクトリに0000_cert.pemと0000_chain.pemができるのでそれを適宜移動させて
examplekey.pemを含めた3つをApacheに設定してあげれば使えるようになると思います。

Apache設定

とりあえずパッケージで入れた状態での説明なので、適宜置換えて見てください

/etc/httpd/conf.d/ssl.conf

とりあえず設定している部分のみ抜き出してます

Listen 443 https # SNIの設定を行うことでhttpsでもバーチャルホストを使えるようにする # もう無いと思うけどAndroid 2.3.7、XPのIE6/8、Java 6u45はSNI非対応 SSLStrictSNIVHostCheck off SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLSessionCache shmcb:/run/httpd/sslcache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM \ EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 \ EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 \ EECDH EDH+aRSA \ !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4" SSLUseStapling on SSLStaplingCache shmcb:/run/httpd/stapling_cache(128000) SSLHonorCipherOrder on Serveradmin webmaster@example.com DocumentRoot /var/www/vhost/www.example.com/public_html ServerName www.example.com CustomLog logs/vhosts/www.example.com/ssl_access_log combined ErrorLog logs/vhosts/www.example.com/ssl_error_log # HTTP/2にこそりと対応させてみる Protocols h2 http/1.1 SSLEngine on SSLCertificateFile "/etc/letsencrypt/live/www.example.com/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/www.example.com/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/www.example.com/chain.pem" SSLCACertificatePath "/etc/pki/CA" SSLCACertificateFile "/etc/pki/CA/cacert.pem" # httpへの通信がきたらhttpsへリダイレクトさせる Header set Strict-Transport-Security "max-age=31536000; env=HTTPS" RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L] 多分これでOKなので、httpd再起動してhttps://www.ssllabs.com/ssltest/で確認してA+が取れれば完了でござる。

以下編集中