私の会社ではOpenVPNを使用してクライアントを中央サーバーに接続し、管理を容易にしています。弊社のファイアウォールソフトウェア(およびそのファイアウォールソフトウェア)にはOpenVPNのサポートが組み込まれており、証明書のジェネレーターが含まれています。最近、このジェネレーターは動作を停止しましたが、その理由はわかりません。ただ、とにかく昔は大変だったので、新しいアプローチを試してみたいと思います。
バグがあるように見えるので、ファイアウォールソフトウェアではなく、OpenVPNを備えたローカルコンピューターでクライアント証明書を生成したいだけです。私たちには既存の認証局があり、私はプレーンテキストで判読可能な完全な証明書を持っています。これには明らかにすべての発行者情報、係数、署名、および証明書自体が含まれます。
私の質問は、DebianベースのLinuxディストリビューションでOpenVPNを使用して、既存の認証局からクライアント証明書を生成できるかどうかです。新しいCAを再生成して署名することもできましたが、かなりの数のクライアントがあり、それらのVPNクライアント証明書を更新するのは面倒なので、むしろしたくありません。
OpenVPNでCAを生成し、必要なもので証明書データを変更しようとしましたが、OpenVPNは私のフォーマットとは少し異なるようです。
CAとクライアントはPKCS12です。これは可能ですか?それとも私はすべてを作り直す必要がありますか?
もちろん?
openssl pkcs12 -in ca.pfx -out ca.crt -clcerts -nokeys openssl pkcs12 -in ca.pfx -out ca.key -nocerts -nodes
openssl genrsa -out client.key 4096 openssl req -sha256 -out client.csr -key client.key -new
openssl x509 -sha256 -req -days 365 -CA ca.crt -CAkey ca.key\ -in client.csr -set_serial 01 -out client.crt
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
注意点の1つ:そのクライアント証明書をAzureで使用したい場合は、証明書にextendedKeyUsage = clientAuth拡張を含める必要があります。それがないと、ログにエラーは表示されませんが、Azureがいくつかのキーチェック後に接続をドロップするだけです。
これを証明書に追加するためのいくつかのポインタについては、 https://stackoverflow.com/questions/17089889/openssl-x509v3-extended-key-usage を参照してください。