x509certificate2 で証明書をインポートする

無線LANなどの802.11 認証に使うための証明書は、デバイスIDなどのコンピュータを証明するための証明書を利用する。

この場合、インポート先のストアは、Windows の証明書ストアの[ コンピュータ ]-[ 個人 ] である。

Windows には証明書インポートウィザードがあるので、こちらを使えばよいのだが、管理者でなければ [ ユーザー ] アカウントにしかインポートができないし、ユーザーに証明書スナップインを立ち上げさせて、インポートさせるなどは、「ほとんど無理」である。

そこでプログラムからp12形式の証明書をインポートする際のポイントを紹介する。お決まりの x509Certificate2 を使う。

Dim computerCert As New X509Certificate2(distCerFile, pWord, X509KeyStorageFlags.MachineKeySet Or  X509KeyStorageFlags.PersistKeySet)

‘ X509KeyStorageFlags.MachineKeySet だけではダメで、
or X509KeyStorageFlags.PersistKeySet を指定しないと、
一見インポートされているように見えるが、実際には機能しないので要注意。

‘ ストア指定、
Dim myStore As New X509Store(StoreName.My, StoreLocation.LocalMachine)

‘ ストアオープン
myStore.Open(OpenFlags.ReadWrite)

‘ 証明書追加
myStore.Add(computerCert)

その後クローズということである。

p12形式でインポートの際にPINが設定されている場合は、①ユーザーに入力させセキュアストリングスで受けるか、②外部からPINを書いたファイルを読み込むか、③ハードコードするかということになる。
②と③はいずれもディスアセンブルされると、p12のPINが漏洩する可能性がある。