ユーザ用ツール

サイト用ツール


cockpit用サーバー証明書の自動更新

cockpit用サーバー証明書の自動更新

サーバー管理に便利なWebコンソールのcockpitだが、サーバー証明書がない環境だと0-self-signed.certという自己署名証明書を生成して終わってしまう。 ApacheにはLet’s Encryptによる証明書を導入しているので、これをcockpit用に転用する。

cockpit用サーバー証明書のフォーマット

cockpit-ws(Cockpit web service)に設定する証明書は以下の形式である必要がある。

  • ファイル名の拡張子は.cert
  • OpenSSLスタイルPEMブロックとして下記の2つ以上を含むこと
    • 先頭からサーバー証明書もしくは中間証明書のBEGIN CERTIFICATEブロック
    • 最後にBEGIN PRIVATE KEYのブロック
最小構成
—–BEGIN CERTIFICATE—–
サーバー証明書ブロック
—–END CERTIFICATE—–
—–BEGIN PRIVATE KEY—–
PRIVATE KEYブロック
—–END PRIVATE KEY—–
中間証明書を含む構成
—–BEGIN CERTIFICATE—–
中間証明書ブロック
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
サーバー証明書ブロック
—–END CERTIFICATE—–
—–BEGIN PRIVATE KEY—–
PRIVATE KEYブロック
—–END PRIVATE KEY—–

証明書更新スクリプト

Apacheに設定した証明書はcronで起動されるcertbotで更新されるので、その更新を検知してcockpit用証明書を複製するスクリプトを作成した。

cockpit-cert
#!/bin/sh
CERTFILE=/etc/letsencrypt/archive/domain.jp/cert1.pem
KEYFILE=/etc/letsencrypt/archive/domain.jp/privkey1.pem
NEWCERT=/etc/cockpit/ws-certs.d/cockpit.cert
 
update=0
if [ -e ${NEWCERT} ]
then
  fp1=`openssl x509 -fingerprint -noout -in ${CERTFILE}`
  fp2=`openssl x509 -fingerprint -noout -in ${NEWCERT}`
  if [ "${fp1}" != "${fp2}" ]
  then
    update=1
  fi
else
  update=1
fi
 
if [ ${update} -eq 1 ]
then
  cat ${CERTFILE} ${KEYFILE} > ${NEWCERT}
  chmod 640 ${NEWCERT}
  chown root:cockpit-ws ${NEWCERT}
fi
cockpit用サーバー証明書の自動更新.txt · 最終更新: 2023/08/27 21:27 by Minoru Kijima