2016/02/14
またこのようなニッチにもほどがあるネタです。
無料のSSL証明書としてお気軽に使っているLet’sEncryptですが、先般、ACMEv1 が完全に廃止され、ACMEv2 オンリーになりました。
気づいたものから、順次、certbot をバージョンアップして、それに対応していたのですが、この期に及んで、CentOS5を使っているサーバがありまして、そんなサーバはとっととリプレイスしてしまえばよいものを、なかなかそうもいかないということで、そのサーバの Let’sEncrypt を ACMEv1 から ACMEv2 対応にした話です。
もう記憶が定かでないのですが、CentOS5 は、普通の certbot が使えないということで、dehydrated というものを使っていました。
以下のような感じでバッチを定期実行して自動更新させてました。
# /usr/local/dehydrated-master/dehydrated -d hogehoge.com -o /usr/local/dehydrated-master/certs –cron
でも、もう以下のようなエラーが出るようになっていました。
まあ、当然です…。
# INFO: Using main config file /usr/local/dehydrated-master/config
+ ERROR: An error occurred while sending get-request to https://acme-v01.api.letsencrypt.org/directory (Status 403)
Details:
{
”type”: “urn:acme:error:serverInternal”,
”detail”: “ACMEv1 is deprecated and you can no longer get certificates from this endpoint. Please use the ACMEv2 endpoint, you may need to update your ACME client software to do so. Visit https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430/27 for more information.”
}
rm: cannot remove `/usr/local/dehydrated-master/domains.txt’: No such file or directory
ということでいろいろと調べた結果、結局やることは「/usr/local/dehydrated-master/ の下にある dehydrated を新しいバージョンにするべし」ということと理解しました。(実際はこの他にopenssl のバージョンアップも必要)
ということで、最新の dehydrated を取得することに。
https://github.com/dehydrated-io/dehydrated にアクセスして、以下からzipファイルをダウンロードして、サーバのどこかに配置します。
「wget で取得すればいいじゃん」と思うんですが、OSデフォルトの openssl が 0.9.8 なもので、wget でダウンロードができなかったので、一旦、PC上にダウンロードしてから、サーバの /usr/local/src/ 以下にアップしました。
/usr/local/src/dehydrated-master.zip が配置されてからは以下です。
# unzip dehydrated-master.zip
# cp -a dehydrated-master/dehydrated /usr/local/dehydrated-master/
ダウンロードしたzipファイルを展開して、その中にある dehydrated を、従来のものと入れ替えるだけですね。
そして以下を実行します。
# /usr/local/dehydrated-master/dehydrated -d hogehoge.com -o /usr/local/dehydrated-master/certs
結果ですが…
# INFO: Using main config file /usr/local/dehydrated-master/config
To use dehydrated with this certificate authority you have to agree to their terms of service which you can find here: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
To accept these terms of service run /usr/local/dehydrated-master/dehydrated --register --accept-terms
.
まだダメです…。
以下を実行して、利用規約へ同意せよ、とのこと。
やりましょう。
# /usr/local/dehydrated-master/dehydrated –register –accept-terms
そして、また、以下を実行します。
# /usr/local/dehydrated-master/dehydrated -d hogehoge.com -o /usr/local/dehydrated-master/certs
内容は変わりましたが、まだエラーです…。
# INFO: Using main config file /usr/local/dehydrated-master/config
Processing hogehoge.com
+ Checking domain name(s) of existing cert… unchanged.
+ Checking expire date of existing cert…
+ Valid till Jul 12 14:00:14 2021 GMT (Less than 30 days). Renewing!
+ Signing domains…
+ Generating private key…
+ Generating signing request…
unable to load Private Key
3924:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: ANY PRIVATE KEY
で、これは結局なにかというと、openssl が 0.9.8 なのでダメってことみたいです。
なので、とにかく、CentOS5 デフォルトの openssl 0.9.8 を使っているのでは使用できない様子。
しかし、このサーバ、/usr/local/ssl/ 以下に、openssl 1.0.2 をソースでインストールしてます( openssl 1.0.2 のインストールの仕方は、openssl0.9.8系OS(CentOS5とか)のdovecotでTLS1.1かTLS1.2に制限する 等を参考にしてください )ので、それを使うことに。
CentOS5 のデフォルトである /usr/bin/openssl を、/usr/local/ssl/bin/openssl にリンクしてしまおうかとも思ったんですが、それはいささか乱暴だし、他に影響があってはいけないなぁということで、更新処理をする前に、/usr/local/ssl にパスを通して、更新処理の際には /usr/local/ssl/bin/openssl を利用するという形をとることに。
結果以下となりました。
# export PATH=/usr/local/ssl/bin:$PATH
# /usr/local/dehydrated-master/dehydrated -d hogehoge.com -o /usr/local/dehydrated-master/certs –cron
バッチにする場合は、この後に、https の再起動も含みます。
これで、CentOS5 の Let’sEncrypt が ACMEv2 に対応するようになりました。
よかった。
とはいえ、このサーバ、リプレイスしないとだなぁ。
どなたかのお役に立てれば幸いです。