我正在开发一个使用由客户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
答案 0 :(得分:0)
是的,主机是强制性的。
这取决于您的代码如何(如果)创建LDAPCertStore
对象。调用构造函数时,需要将LDAPCertStoreParameters
对象传递给它。该类包含一个允许您指定主机(和端口)的构造函数。
尝试像这样创建LDAPCertStore
:
LDAPCertStoreParameters params = new LDAPCertStoreParameters( "hostname", 389 );
CertStore store = CertStore.getInstance("LDAP", params);
祝你好运。