表題の通り。AzureポータルやCLIなどから作ると自己署名な証明書は簡単に作れますが、CA証明書として必要なプロパティは設定できないようでした。具体的には X509v3 Basic Constraints
の CAフラグがTRUEになった状態のものを簡単に作れないという感じです。
解決策ですが、今のところAzure Key VaultのREST APIをたたいて必要なプロパティを設定したJSONで証明書を作る、という感じです。わぁ。
書いてる通り、証明書作成用APIに投げるJson本文にbasic_constraintsプロパティを追加します。それ以外のパラメーターはドキュメント見ながら埋めてください。key_usageとかはこのへん参考に。実際になげたJSON本文は以下のような感じになりました。
{
"policy": {
"key_props": {
"exportable": true,
"kty": "RSA",
"key_size": 2048,
"reuse_key": false
},
"secret_props": {
"contentType": "application/x-pkcs12"
},
"x509_props": {
"subject": "CN=ca.azure.moe",
"key_usage": [
"KeyCertSign",
"crlsign",
"DigitalSignature",
"KeyEncipherment"
],
"basic_constraints": {
"ca": true,
"path_len_constraint": 3
},
"validity_months": 1200
},
"issuer": {
"name": "Self"
}
}
}
さて生なREST APIって投げるの面倒なので、今回はAzure Cloud Shell上でaz rest コマンドを使います。
az rest --method post --url "https://YOURKEYVAULT.vault.azure.net/certificates/YOURCERTNAME/create?api-version=7.2" --resource "https://vault.azure.net" --body "{\"policy\":{\"key_props\":{\"exportable\":true,\"kty\":\"RSA\",\"key_size\":2048,\"reuse_key\":false},\"secret_props\":{\"contentType\":\"application\/x-pkcs12\"},\"x509_props\":{\"subject\":\"CN=ca.azure.moe\",\"key_usage\":[\"KeyCertSign\",\"crlsign\",\"DigitalSignature\",\"KeyEncipherment\"],\"basic_constraints\":{\"ca\":true,\"path_len_constraint\":3},\"validity_months\":1200},\"issuer\":{\"name\":\"Self\"}}}"
できあがった証明書を見るとちゃんとCA用として設定されてます。

これでopensslコマンドとかでサーバー証明書作っても変な感じにはならないはず…