MacPCでPalo AltoのGlobal Protect用証明書をLet's Encryptで作成するメモ

いつも忘れて調査に時間がかかるのでメモ。 ※情報が正しくない恐れありです。いつか清書します。

参考にさせていただいたサイト

www.bitbodyguard.com

qiita.com

事前準備1

Global Protect用のドメインを取得 & TXTレコードが書き換えられる環境を用意しておく。

事前手順2

下記を事前にインストールしておく。

  • certbot
    • brew install certbot
  • openssl
    • brew install openssl
  • pan-python
    • pip install pan-python

証明書の用意

下記コマンドを実行。変数の箇所は各自の環境に合わせて書き換えてください。

DOMAIN=hogehoge.com #Global Protect用のドメイン
MAIL=admin@hogehoge.com #証明書失効について通知したりするメールアドレス

certbot certonly --manual \
-d ${DOMAIN} -m ${MAIL} --agree-tos --manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory

下記のような感じで登録するテキストレコードが表示するので、それを登録し、ちょっと時間を置いてからEnterする。

Please deploy a DNS TXT record under the name
_acme-challenge.hogehoge.com with the following value:

xxxxxxxxxxxxxxxxxxxxxxx

Before continuing, verify the record is deployed.

証明書作成に成功したらpfx形式の証明書を生成する。

TEMP_PWD=$(openssl rand -hex 15)
sudo openssl pkcs12 -export -out letsencrypt_pkcs12.pfx -inkey /etc/letsencrypt/live/${DOMAIN}/privkey.pem -in /etc/letsencrypt/live/${DOMAIN}/cert.pem -certfile /etc/letsencrypt/live/${DOMAIN}/chain.pem -passout pass:$TEMP_PWD

Palo AltoのAPIキーを得る

Palo AltoのAPIキーを得る。下記変数の箇所は各環境に合わせてください。

#変数
PAN_MGMT=192.168.xx.xx #Palo AltoのIP
USERNAME=admin
PASSWORD=hogehoge
#APIキー発行
panxapi.py -h ${PAN_MGMT} -l ${USERNAME}:${PASSWORD} -k

成功するとこんな感じで表示

keygen: success
API key:  "xxxxx"

証明書をアップロード

下記のような感じでアップロードする。

# 変数
CERT_NAME=LetsEncryptWildcard #任意の証明書名
API_KEY="xxxxx" #上記で生成されたAPIキー

# アップロード
curl -k --form file=@letsencrypt_pkcs12.pfx "https://$PAN_MGMT/api/?type=import&category=certificate&certificate-name=$CERT_NAME&format=pkcs12&passphrase=$TEMP_PWD&key=$API_KEY" && echo " "

curl -k --form file=@letsencrypt_pkcs12.pfx "https://$PAN_MGMT/api/?type=import&category=private-key&certificate-name=$CERT_NAME&format=pkcs12&passphrase=$TEMP_PWD&key=$API_KEY" && echo " "

成功すると下記のような結果が表示される。

<response status="success"><result>Successfully imported LetsEncryptWildcard into candidate configuration</result></response>

あとはPalo AltoのGUIコンソールで「デバイス」-「証明書の管理」-「証明書」でアップロードした証明書が現れているので、Global Protectポータル等でアップロードした証明書を使えばOK。