Go サンプルプログラム
slogical SSL REST API を使って、SSL証明書の新規注文・再発行を自動化するサンプルプログラムです。
Go 標準ライブラリのみ使用のため、外部パッケージ不要。go run ssl-client.go ですぐに実行できます。
概要
このサンプルクライアントは以下の 6 パターンに対応しています。
- 新規注文(後払い)× メール認証 / ファイル認証 / DNS 認証
- 再発行 × メール認証 / ファイル認証 / DNS 認証
認証の承認待ち中は自動的にポーリング(デフォルト 30 秒ごと)し、
証明書が発行されると自動でダウンロードします。
途中で中断しても、ステートファイル(ssl-state.json)から処理を再開できます。
aws configure で認証情報が設定済みであれば、
TXT レコードの作成・削除を自動で行います。
AWS CLI がない場合は、設定すべき DNS レコードを表示して手動設定を案内します。
ダウンロード
ソースコードをダウンロードして、Go がインストールされた環境で実行してください。
↓ ssl-client.go をダウンロードセットアップ
外部ライブラリは不要です。go run ssl-client.go でそのまま実行できます。
# Go バージョン確認(1.20 以上) go version # ヘルプの表示 go run ssl-client.go help
API キーは マイページ で取得できます。
毎回指定するのが面倒な場合は環境変数 SSL_API_KEY に設定しておくと便利です。
# Linux / macOS export SSL_API_KEY=your_api_key_here # Windows PowerShell $env:SSL_API_KEY = "your_api_key_here"
新規注文
order コマンドで後払いの新規注文を作成します。
注文後、CSR と秘密鍵が自動生成されてカレントディレクトリに保存されます。
ssl-client.key は厳重に保管してください。
紛失した場合は再発行が必要です。
新規注文 — メール認証
DigiCert が admin@ / webmaster@ / postmaster@ 等に承認メールを送信します。
-dcv-email で受信するアドレスを指定してください。
go run ssl-client.go order \ -api-key YOUR_API_KEY \ -product RapidSSL \ -years 1 \ -domain www.example.com \ -dcv email \ -dcv-email admin@example.com \ -corp-name "株式会社〇〇" \ -corp-name-alph "Example Corp" \ -name1 田中 \ -name2 太郎 \ -name-alph1 Tanaka \ -name-alph2 Taro \ -tel 03-1234-5678 \ -email tanaka@example.com \ -invoice-email tanaka@example.com \ -post 1000001 \ -addr1 東京都 \ -addr2 千代田区 \ -addr3 "〇〇1-1"
実行すると以下の流れで処理が進みます:
- CSR と秘密鍵を生成(
ssl-client.key/ssl-client.csr) - API に注文を送信(
POST /orders) - 指定のメールアドレスに承認メールが送信されます → クリックしてください
- 30 秒ごとにステータスをポーリング
- 発行完了 →
cert_12345.pem/chain_12345.pemに保存
新規注文 — ファイル認証
Web サーバーの特定 URL にファイルを設置して認証する方式です。
プログラムがファイルを自動作成するので、それを Web サーバーのドキュメントルートにコピーしてください。
go run ssl-client.go order \ -api-key YOUR_API_KEY \ -product RapidSSL \ -years 1 \ -domain www.example.com \ -dcv file \ -corp-name "株式会社〇〇" \ -corp-name-alph "Example Corp" \ -name1 田中 \ -name2 太郎 \ -name-alph1 Tanaka \ -name-alph2 Taro \ -tel 03-1234-5678 \ -email tanaka@example.com \ -post 1000001 \ -addr1 東京都 \ -addr2 千代田区 \ -addr3 "〇〇1-1"
実行すると以下の流れで処理が進みます:
- CSR と秘密鍵を生成
- API に注文を送信 → DCV トークンを取得
.well-known/pki-validation/fileauth.txtを作成(内容はトークン)- このファイルを Web サーバーのドキュメントルートに配置してください
→http://www.example.com/.well-known/pki-validation/fileauth.txtでアクセス可能に - 30 秒ごとにステータスをポーリング → 認証完了で証明書を保存
新規注文 — DNS 認証
AWS CLI がインストールされていれば、Route53 の TXT レコードを自動で作成・削除します。
-dns-zone-id に Route53 の Hosted Zone ID を指定してください。
go run ssl-client.go order \ -api-key YOUR_API_KEY \ -product RapidSSL \ -years 1 \ -domain www.example.com \ -dcv dns \ -dns-zone-id Z0123456789ABCDEFGHIJ \ -corp-name "株式会社〇〇" \ -corp-name-alph "Example Corp" \ -name1 田中 \ -name2 太郎 \ -name-alph1 Tanaka \ -name-alph2 Taro \ -tel 03-1234-5678 \ -email tanaka@example.com \ -post 1000001 \ -addr1 東京都 \ -addr2 千代田区 \ -addr3 "〇〇1-1"
Route53 に以下の TXT レコードを自動作成し、証明書発行後に自動削除します:
名前 : _dnsauth.www.example.com タイプ: TXT 値 : <DCV トークン> TTL : 60
-dns-zone-id を省略すると手動モードになります。
プログラムが設定すべき DNS レコードを表示するので、DNS 管理画面で設定して Enter を押してください。
go run ssl-client.go order \ -api-key YOUR_API_KEY \ -product RapidSSL \ -years 1 \ -domain www.example.com \ -dcv dns \ -corp-name "株式会社〇〇" \ -name1 田中 \ -name2 太郎 \ -tel 03-1234-5678 \ -email tanaka@example.com
実行すると以下の表示が出るので、DNS 管理画面で設定して Enter を押してください:
━━ DNS 認証(手動設定)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 名前 : _dnsauth.www.example.com タイプ: TXT 値 : _abcdefghijklmnopqrstuvwxyz01234 TTL : 60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DNS レコードを設定したら Enter を押してください ...
再発行
reissue コマンドで発行済み注文の再発行を行います。
新しい CSR・秘密鍵が自動生成されます(ssl-client-reissue.key / ssl-client-reissue.csr)。
-order-id には当サイトの注文 ID を指定します(マイページで確認できます)。ステートファイルが存在する場合は、注文 ID を省略できます。
再発行 — メール認証
go run ssl-client.go reissue \ -api-key YOUR_API_KEY \ -order-id 12345 \ -domain www.example.com \ -dcv email \ -dcv-email admin@example.com
再発行 — ファイル認証
go run ssl-client.go reissue \ -api-key YOUR_API_KEY \ -order-id 12345 \ -domain www.example.com \ -dcv file
実行すると .well-known/pki-validation/fileauth.txt が作成されます。
Web サーバーのドキュメントルートに配置してください。
再発行 — DNS 認証
go run ssl-client.go reissue \ -api-key YOUR_API_KEY \ -order-id 12345 \ -domain www.example.com \ -dcv dns \ -dns-zone-id Z0123456789ABCDEFGHIJ
go run ssl-client.go reissue \ -api-key YOUR_API_KEY \ -order-id 12345 \ -domain www.example.com \ -dcv dns
途中再開
処理の途中でCtrl+C などで中断しても、ステートファイル(ssl-state.json)に状態が保存されています。
同じコマンドをもう一度実行するだけで、中断した時点から自動的に再開します。
# 例: 中断した新規注文(メール認証)を再開する場合 # ssl-state.json が存在する限り、フラグを省略しても再開できます go run ssl-client.go order -api-key YOUR_API_KEY
ステートファイルの内容(例):
{
"action": "order",
"step": "pending-dcv",
"order_id": 12345,
"dcv": "file",
"token": "_abcdefghijklmnopqrstuvwxyz01234",
"domain": "www.example.com",
"file_auth_path": ".well-known/pki-validation/fileauth.txt"
}
処理完了後は step が completed に更新されます。
別のドメインの注文を始める場合は、ステートファイルを削除または別名で指定してください。
# ステートファイルを指定して別の注文を管理 go run ssl-client.go order -api-key YOUR_API_KEY -domain other.example.com \ -state-file ssl-state-other.json ...
オプション一覧
order フラグ
| フラグ | 説明 | デフォルト |
|---|---|---|
-api-key | API キー(環境変数 SSL_API_KEY でも可) | — |
-product | 製品名: RapidSSL / RapidSSLWildcard / QuickSSLPremium / QuickSSLPremiumWildcard | RapidSSL |
-years | 有効年数(1〜3) | 1 |
-domain | ドメイン名(CN)【必須】 | — |
-sans | 追加ドメイン(スペース区切り) | — |
-dcv | 認証方法: email / file / dns | email |
-dcv-email | メール認証のアドレス(例: admin@example.com) | — |
-dns-zone-id | Route53 Hosted Zone ID(dns 認証で自動設定する場合) | — |
-corp-name | 会社名(日本語) | — |
-corp-name-alph | 会社名(英語) | — |
-name1 | 担当者 姓 | — |
-name2 | 担当者 名 | — |
-name-alph1 | 担当者 姓(英語) | — |
-name-alph2 | 担当者 名(英語) | — |
-tel | 電話番号 | — |
-email | 担当者メールアドレス | — |
-invoice-email | 請求先メール(省略時は -email と同じ) | — |
-post | 郵便番号 | — |
-addr1 | 住所(都道府県) | — |
-addr2 | 住所(市区町村) | — |
-addr3 | 住所(番地) | — |
-state-file | ステートファイルのパス | ssl-state.json |
-poll-interval | ポーリング間隔(秒) | 30 |
reissue フラグ
| フラグ | 説明 | デフォルト |
|---|---|---|
-api-key | API キー | — |
-order-id | 再発行する注文 ID(省略時はステートファイルから) | — |
-domain | ドメイン名(省略時はステートファイルから) | — |
-dcv | 認証方法: email / file / dns | email |
-dcv-email | メール認証アドレス | — |
-dns-zone-id | Route53 Hosted Zone ID | — |
-state-file | ステートファイルのパス | ssl-state.json |
-poll-interval | ポーリング間隔(秒) | 30 |
status / download フラグ
| フラグ | 説明 |
|---|---|
-api-key | API キー |
-order-id | 注文 ID(省略時はステートファイルから) |
-state-file | ステートファイルのパス(デフォルト: ssl-state.json) |