EC2に立てたJenkinsにLet's Encryptを適用させる
参考サイト
- AWS EC2にLet's Encryptを導入してみた
- GitlabへpushしたのをトリガにJenkinsをビルドさせるも動かない件
- Let's Encryptを使ってSSL証明書を自動更新する(AWS/Amazon Linux/Apache)
概要
現在お仕事を頂いている会社にCIを導入したいなと思いまして、Jenknis入れようと思いました。
CircleCIやTravisCIも考えましたが、一番慣れてたJenkinsにしました。
で、せっかく立ち上げたので、オレオレではなく、Let's Encryptを使ってキチンとSSL化しようと思います。
導入
Jenkninsインストール
この辺はネットにいっぱい転がっているのですが、コマンド的には以下です。
## OpenJDKのインストール $ sudo yum -y install java-1.8.0-openjdk-devel ## Jenkinsのインストール $ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo $ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key $ sudo yum install jenkins
Jenkinsの設定
次にJenkinsの設定を変更します。
vim /etc/sysconfig/jenkins
で以下の項目を変更します。
JENKINS_PORT="" JENKINS_HTTPS_PORT="8443" JENKINS_ARGS="--prefix=/jenkins"
Let's Encryptのインストール
参考サイトに記載している記事がとてもわかり易かったです。
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto $ sudo chmod 700 /usr/bin/certbot-auto $ sudo certbot-auto certonly -d ドメイン --email メールアドレス
インタラクティブな選択が出てて、apacheを選択すれば以下の場所に、以下のようなファイルが作成されます。
# ll /etc/letsencrypt/live/ドメイン/ 合計 4 -rw-r--r-- 1 root root 543 1月 22 23:10 README lrwxrwxrwx 1 root root 38 1月 22 23:10 cert.pem -> ../../archive/ドメイン/cert1.pem lrwxrwxrwx 1 root root 39 1月 22 23:10 chain.pem -> ../../archive/ドメイン/chain1.pem lrwxrwxrwx 1 root root 43 1月 22 23:10 fullchain.pem -> ../../archive/ドメイン/fullchain1.pem lrwxrwxrwx 1 root root 41 1月 22 23:10 privkey.pem -> ../../archive/ドメイン/privkey1.pem
Apacheとの連携
先程の証明書を指定して、JenkinsとApache連携します。
<VirtualHost *:443> NameVirtualHost *:443 <IfModule mod_proxy.c> SSLEngine On SSLProxyEngine on SSLCertificateFile /etc/letsencrypt/live/ドメイン/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/ドメイン/chain.pem ProxyPass /jenkins https://localhost:8443/jenkins nocanon ProxyPassReverse /jenkins https://localhost:8443/jenkins ProxyRequests Off </IfModule> </VirtualHost>
JenkinsとApacheを起動すれば以下のように有効な証明書となります。
証明書の更新
Let's Encryptは有効期限が3ヶ月と短いので気づいたらあっという間に切れているということになりそうです。
なので、cronで更新のスクリプトを叩くように設定しておきます。
00 01 * * * root /usr/bin/certbot-auto renew --post-hook "service httpd restart"
現状実行しても作成したばかりなので処理がスキップされますが、更新1ヶ月前に確認して、更新されるかをチェックします。
感想
Let's Encryptを使用したことなく今回はじめて使ったのですが、簡単に実装できるものなのですね。もっと積極的に使っていきたいと思います。