【问题标题】:add user certificate to Active Directory - Java将用户证书添加到 Active Directory - Java
【发布时间】:2014-07-24 17:29:59
【问题描述】:

我继承了从 AD 中提取 userCertificate 的代码:

     byte[] userCERT = (byte[])attribs.get("userCertificate").get(); 
     ByteArrayInputStream bais = new ByteArrayInputStream( (userCERT)) ;
     CertificateFactory cf = CertificateFactory.getInstance("X.509");
     X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);

我现在需要做的恰恰相反。用户将通过网络提交他们的公钥。是否像这样简单地获取字符串并对其执行 toBytes() :

    ByteArrayInputStream bais = new ByteArrayInputStream(userCertificateString.getBytes()) ;
    Attribute modCert = new BasicAttribute("userCertificate", bais);
    mods[0] = new ModificationItem(context.REPLACE_ATTRIBUTE, modCert);
    context.modifyAttributes(dn + "," + searchBase, mods);   

更新:事情没这么简单。这不起作用。
任何指导都会很棒。

【问题讨论】:

  • 它不起作用。 AD 说它想要一个 DER 编码的 X509v3。所以我想我必须以某种方式从字符串构建其中一个并将其转换为 byte[]

标签: java active-directory x509certificate


【解决方案1】:

最终的工作代码在这里:

   ByteArrayInputStream bais = new ByteArrayInputStream( (userCertificateString.getBytes())) ;
   CertificateFactory cf = CertificateFactory.getInstance("X.509");
   X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);

   System.err.println("<I>" + cert.getIssuerX500Principal().getName().toString());
   System.err.println("<S>" + cert.getSubjectX500Principal().getName().toString());

   Attribute modCert = new BasicAttribute("userCertificate", cert.getEncoded());

   mods[0] = new ModificationItem(context.REPLACE_ATTRIBUTE, modCert);
   context.modifyAttributes(dn + "," + searchBase, mods);

希望对某人有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多