2019年8月19日月曜日

Raspberry PiのTomcat 9にLet's Encryptを

Raspberry Piといえども最近はTLSが必要らしいので早々にTLS化する必要があります。
Let's Encryptを使用してみました。

# apt-get install python-certbot-apache
というのでいろいろインストールされた。
いろいろつついてしまった中で、最初はメールアドレスやライセンスの質問があった気がします。
とりあえず全部rootで実行してしまいましたがtomcatかなにかで使えるのかな?

何度か試してみた後…
# certbot certonly -d siisise.net
How would you like to authenticate with the ACME CA?
(認証方法どないする?)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
(Apacheのプラグイン使う)
2: Spin up a temporary webserver (standalone)
(仮の独立Webサーバ立ててサインアップする)
3: Place files in webroot directory (webroot)
(webのrootディレクトリにファイル置いて認証する)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3つの選択肢、サーバを止められるなら2、止められないなら3かな
とりあえず2と3で試してみた。ワイルドカード証明書はこれとは別でDNSを使うと取れるらしいです。

2の場合はポート80を使っているサーバを止めてから実行するだけ。
# service tomcat9 stop を先に実行しておく
仮のサーバが起動し、ドメイン接続確認後、 /etc/letsencrypt/live/siisise.net/ に各種ファイルを作ってくれました。developer.jpも同じように作成。

3の場合は
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for siisise.net
Input the webroot for siisise.net: (Enter 'c' to cancel):
webrootどこにある? と聞かれます。Tomcatの場合は webapps/ROOT/ のことです。
/var/lib/tomcat9/webapps/ROOT/ (マルチドメインにしていない場合)などフルパスで指定すると勝手にファイルを作って勝手に認証され、勝手にファイルを消すか何かで終わってくれます。

証明書とチェーン証明書は
/etc/letsencrypt/live/siisise.net/fullchain.pem
キーファイル(秘密鍵)は
/etc/letsencrypt/live/siisise.net/privkey.pem
2019年11月16日(3カ月くらい)で証明書は切れるよと。
新しい証明書とりたいときはcertbotを走らせるべし。
手動で全証明書更新するなら"certbot renew"を実行するべし。みたいな説明が出て完了。

最近の? Tomcat 9はJKSでもPKCS#11?でもPKCS#12でも使えますが、今回はApacheと同じcertbotが吐き出したPKCS#11かなにか(鍵と証明書が別ファイル)の形式のまま。PKCS12にまとめたりJKSに変換したりはしていないのでお手軽です。ディレクトリと/etc/letsencrypt/archive/ドメイン/privkey.pemのアクセス権をtomcatで利用可能なように調整。
# chgrp tomcat /etc/letsencrypt/archive
他いろいろ
tomcatのconfからシンボリックリンクを張り。使うのは証明書(cert.pemとchain.pem
 かfullchain.pem)と秘密鍵(privkey.pem)

# ln -s /etc/letsencrypt/live/siisise.net/fullchain.pem /etc/tomcat9/siisisenet-rsa-fullchain.pem
# ln -s /etc/letsencrypt/live/siisise.net/privkey.pem /etc/tomcat9/siisisenet-rsa-key.pem

Tomcatの /etc/tomcat9/server.xml を修正、起動。

HTTP/2の使えるport 8443の設定コメントを使ってport 443を設定してみた。(例によって<>括弧は全角)
< Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnable="true" >
 <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol">
 <SSLHostConfig>
  <Certificate
 certificateKeyFile="conf/siisisenet-rsa-key.pem"
 certificateFile="conf/siisisenet-rsa-fullchain.pem"
 type="RSA" />
 </SSLHostConfig>
 <SSLHostConfig hostName="developer.jp">
  <Certificate
 certificateKeyFile="conf/developerjp-rsa-key.pem"
 certificateFile="conf/developerjp-rsa-fullchain.pem"
 type="RSA" />
 </SSLHostConfig></Connector>

とこんなかんじでマルチドメインでも使えます。SSLHostConfig デフォルト以外はhostNameを付けています。
certificateFileをfullchain.pem  にするとcertificateChainFileは要らないので省略しています。(Apache httpd 2.4.8以上と同じ、らしい)
# service tomcat9 restart かなにかで再起動。
使えないときは /var/log/tomcat9/catalina.2019-08-19.log などでエラーが出ていないかチェックします。
https://siisise.net/ や https://developer.jp/ にアクセスできることを確認。その他ドメインでもアクセスできますがドメインが違うと警告がでます。

Tomcatでサーバ運用は危険といわれていたこともありましたが、今は何が危険なのか。
自動更新までは試していないので、それはまたそのときかな。このまま更新を自動化してもアクセス権が死ぬかもしれない。秘密鍵は更新されない? さてどうでしょう。

0 件のコメント:

コメントを投稿

PostgreSQLでIPv6、リンクローカルアドレスにはまる

IPv6、使いたくないという声の方がよく聞きますが、いまさらなので使っていきましょう。 今回はリンクローカルアドレスを使おうとしてはまる。 とある停電でDHCPのIPv4アドレスが振り直されてしまったのでRaspberryPiのIPv6使っておくかというふうに考えてみました...