X509Enrollment.CX509CertificateRequestPkcs10オブジェクトのInitializeFromPrivateKey()でテンプレート パラメーターを指定すると問題が発生します。「ユーザー」のテンプレート以外のものは、次の例外になります:-
CertEnroll::CX509CertificateRequestPkcs10::InitializeFromPrivateKey: 要求された証明書テンプレートは、この CA ではサポートされていません。0x80094800 (-2146875392)
使用する必要がある特定の証明書テンプレートがあり、それを試すとコードが例外をスローします。テンプレートは、CA と、次のコードを実行しているクライアント マシンに存在します。
Javascript コードは次のとおりです。
<script type="text/javascript">
var sCertificate = null;
var sDistinguishedName = "C=\"\";S=\"\";L=\"\";O=\"XXXXX\";OU=\"XXXXXXX\";E=\"XXXXX@XXXX.com\";CN=\"xxxxxxx\";";
var template = "RegistrationCert"; //Anything Other than "User" fails, have tried template Oid too.
var classFactory = new ActiveXObject("X509Enrollment.CX509EnrollmentWebClassFactory");
var objEnroll = classFactory.CreateObject("X509Enrollment.CX509Enrollment");
var objPrivateKey = classFactory.CreateObject("X509Enrollment.CX509PrivateKey");
var objRequest = classFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10");
var objDN = classFactory.CreateObject("X509Enrollment.CX500DistinguishedName");
objPrivateKey.ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0";
objPrivateKey.KeySpec = "1";
objPrivateKey.ProviderType = "1";
try
{
objRequest.InitializeFromPrivateKey(1, objPrivateKey, template);
objDN.Encode(sDistinguishedName, 0);
objRequest.Subject = objDN;
objEnroll.InitializeFromRequest(objRequest);
sCertificate = objEnroll.CreateRequest(1);
document.writeln(sCertificate);
}
catch (ex)
{
document.writeln(ex.description);
}
</script>
他のいくつかの質問
- テンプレートがクライアント マシンに存在する必要があると思いますか? そうでなければ、テンプレートを照会する CA の場所をどのように知るのでしょうか?
- クライアント上の CertEnroll は、Windows 2003 CA サーバーに対しても機能しますか??
あなたが私を助けることができれば、それは大歓迎です!!!
追加情報
- クライアントは Windows 7 で、MS IE9 クライアントが管理者として実行されています。
- 上記のページをホストする Web アプリは、HTTPs 経由でアクセスされます。
- Web アプリは Win2003 CA サーバーでホストされています。
投稿する前に私が見た...
-
CertEnroll + InitializeFromPrivateKey に関する Stackoverflow スレッド-テンプレート名ではなくテンプレート OID の使用に関するブログ
- MSDN / alejacma のサイト
- MSDN の CertEnroll API