2013-12-12 53 views
3

我使用SCEP为我的web服务创建证书。成功创建证书并启动服务器后,我尝试通过浏览器访问wsdl,该浏览器显示错误消息,指出此应用程序不允许使用证书类型,错误代码为:sec_error_inadequate_cer_type。一位同事指出,我必须将扩展密钥属性中的密钥用法更改为“服务器认证”,并且应该在认证请求中完成。SCEP和扩展证书属性

要创建一个新的请求,我正在使用bouncycastle。请参见下面的代码片段:

PKCS10CertificationRequestBuilder builder = new PKCS10CertificationRequestBuilder(subject, pkInfo); 
    builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, new DERPrintableString(challengePassword)); 

    return builder.build(signer); 

的问题是,现在我发现了如何像这样添加一些请求的文档。我想通了,唯一的一点是,最有可能我必须添加其他属性的建设者与对象标识符“PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes”:

builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes, ???); 

但是什么应该被传递给制造商的的addAttribute法等等请求的证书将扩展证书属性设置为“服务器身份验证”?

我做了一些研究,但我没有找到任何文档或例子给我提供了一些有用的答案。

一些信息: 我使用JSCEP和BouncyCastle的1.48

我希望有人能指出我的解决方案。 在此先感谢。

回答

0

扩展证书属性已弃用,但存在另一个名为Extension request的PKCS#9属性,其中可能包含调用方想要包含在证书中的一些扩展名。

的extensionRequest属性类型可以被用来携带关于证书扩展请求者希望被包括在 证书信息 。

当然,认证中心必须支持此属性,并且可以根据其认证策略来忽略它。

包含这个属性,在企业社会责任,你可以使用此代码(未测试):

KeyUsage ku = new KeyUsage(KeyUsage.digitalSignature); 
Extension kuExt = new Extension(Extension.keyUsage, true, ku.getEncoded()); 
ExtendedKeyUsage eku = new ExtendedKeyUsage(KeyPurposeId.id_kp_serverAuth); 
Extension ekuExt = new Extension(Extension.extendedKeyUsage, true, eku.getEncoded()); 
Extensions exts = new Extensions(new Extension[] {kuExt, ekuExt}); 
builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, exts); 
+0

非常感谢你。这件事情让我感到很快乐。顺便说一句。对不起,因为我是在度假,所以今天是第一天我可以测试它。 – vik