異なるサーバーでCSR証明書発行要求を作成した証明書をインポートすると秘密鍵が表示されない

普段、仕事で証明機関を操作する機会がないと分からないことが多いかもしれませんが、これまで何度か証明機関を構築してきたんですが、最近知ったことがあるので備忘録です。


それは、証明書の秘密鍵は証明機関から作成、提供されないということです。


これまでは、CSRはどのサーバーで作成してもいいものだと思っていましたが、これが誤った知識でした。


例えば、Aサーバーで作成したCSRで発行してもらったサーバー証明書をBサーバーで利用するというケースです。


この場合、秘密鍵を持っているのはAサーバーなので、Bサーバーに証明書をインポートしても秘密鍵が表示されません。つまり、CSRを作成する場合は、実際に使うサーバーで行うほうがいいですね。

 


参考になったのがマイクロソフトの公式ブログです。

https://blogs.msdn.microsoft.com/lync_support_team_blog_japan/2016/03/22/privatekey/


秘密鍵を保持しない状況となる要因としては以下のような理由が考えられとあります。

・異なるサーバーで証明書発行要求を作成した証明書をインポートした。
・一回証明書をインポートした後、一度証明書ストアから削除し、再度インポートした。

秘密鍵付きの証明書とするためには証明書発行要求を作成したサーバー上で、証明機関から発行された証明書をインポートする必要があります。異なるサーバーで証明書発行要求を発行する必要がある場合は、秘密鍵をエクスポート可能な証明書として発行要求を作成し、一旦秘密鍵付きの証明書としてインポートした後、エクスポートして、他のサーバーへインポートする必要があります。


上記に書かれている通り、CSRは自サーバー以外ダメというわけではなくて、ADCSなどで証明書を発行する場合に、代替えで別のサーバーでCSRを発行した場合は、一旦、CSRを作成したサーバーに証明書をインポートして、秘密鍵を保持した状態のサーバーをエクスポートすればOKです。


その際に、秘密鍵も一緒にエクスポートしてあげます。意外と知らないとはまる事象ではないかと思います。ちなみに、秘密鍵は自サーバーであれば、復旧出来ますので、例えば、誤ってインポートした証明書を削除してしまうと、次にインポートしても証明書に秘密鍵が表示されなくなるので、注意です。


私も以前、この手順で焦ったことがあります。