小程序证书CRL分发点没有主机的LDAP URL

时间:2014-02-24 10:31:03

标签: java security applet ldap certificate-revocation

我正在开发一个使用由客户CA颁发的证书签名的applet的Web应用程序。该证书包含CRL分发点的URL,该URL未定义主机和端口。证书属性“CRL分发点”和“授权信息访问”包含类似于“ldap:/// CN = my-cn ...”的URL。

证书吊销检查API(C:\ Users [my_user] \ AppData \ LocalLow \ Sun \ Java \ Deployment \ log)生成的日志文件表明值“localhost”和“389”正在用于主机和端口。这是日志文件的片段:

...
certpath: DistributionPointFetcher.getCRLs: Checking CRLDPs for CN=xxx, O=yyy, L=zzz, C=PT
certpath: Trying to fetch CRL from DP ldap:///CN=_my-cn_?certificateRevocationList?base?objectClass=cRLDistributionPoint
certpath: CertStore URI:ldap:///CN=_my-cn_?certificateRevocationList?base?objectClass=cRLDistributionPoint
...
network: Connecting http://localhost:389/ with proxy=DIRECT
...
certpath: LDAPCertStore.engineInit about to throw InvalidAlgorithmParameterException
javax.naming.CommunicationException: localhost:389 [Root exception is    java.net.ConnectException: Connection refused: connect]
  at com.sun.jndi.ldap.Connection.<init>(Unknown Source)
...

任何人都可以确认主机是必需的,否则使用默认值“localhost”?

我在LDAP RFC(http://www.ietf.org/rfc/rfc4516.txt)中读到,如果“host”字段不存在,则客户端必须具有要联系的相应LDAP服务器的某些先验知识。是否可以配置“主机”属性?

我使用的是JRE版本1.7.0_45(版本1.7.0_45-b18)。

谢谢你, TelmoSimões

1 个答案:

答案 0 :(得分:0)

是的,主机是强制性的。

这取决于您的代码如何(如果)创建LDAPCertStore对象。调用构造函数时,需要将LDAPCertStoreParameters对象传递给它。该类包含一个允许您指定主机(和端口)的构造函数。

尝试像这样创建LDAPCertStore

LDAPCertStoreParameters params = new LDAPCertStoreParameters( "hostname", 389 );
CertStore   store = CertStore.getInstance("LDAP", params);
祝你好运。