当前位置: 首页 > 知识库问答 >
问题:

ssl证书到AD密码的更改

公西星文
2023-03-14

我在唱Java和tring在广告中修改密码。我已将证书导入服务器,但证书中出现错误。

导入有效:

keytool -import -keystore "C:\Program Files\Java\jre6\lib\security\cacerts" -trustcacerts -alias openldap -file "C:\certnew.cer"

列表有效:

keytool -list -keystore "C:\Program Files\Java\jre6\lib\security\cacerts"

我的代码:

public class PassChange
{
    public static void main (String[] args) {

    Hashtable env = new Hashtable();
    String userName = "CN=optimus,DC=ad,DC=euclid,DC=com";

    String oldPassword = "euclid!23";
    String newPassword = "kcube!23";

    //Could also do this via command line java -Djavax.net.ssl.trustStore....

    String keystore = "C:\\Program Files\\Java\\jre6\\lib\\security\\cacerts";

    // 1    String keystore = "C:\\Program Files\\Java\\jre6\\lib\\security\\cacerts";
    // 2    String keystore = "C:\\Program Files\\Java\\jre6\\lib\\security\\cacerts.jks";
    // 3    String keystore = "c:\\";
    // 1,2,3 all error

    System.setProperty("javax.net.ssl.trustStore", keystore);

    env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
    //set security credentials, note using simple cleartext authentication
    env.put(Context.SECURITY_AUTHENTICATION,"simple");
    env.put(Context.SECURITY_PRINCIPAL,userName);
    env.put(Context.SECURITY_CREDENTIALS,oldPassword);

    //specify use of ssl
    env.put(Context.SECURITY_PROTOCOL,"ssl");

    //connect to my domain controller
    String ldapURL = "ldaps://xxx.xxx.xxx.xxx:636";
    env.put(Context.PROVIDER_URL,ldapURL);

    try {

        // Create the initial directory context
        LdapContext ctx = new InitialLdapContext(env,null);

        //change password is a single ldap modify operation
        //that deletes the old password and adds the new password
        ModificationItem[] mods = new ModificationItem[2];
        String oldQuotedPassword = "\"" + oldPassword + "\"";
        byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE");
        String newQuotedPassword = "\"" + newPassword + "\"";
        byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");

        mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("unicodePwd", oldUnicodePassword));
        mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));

        ctx.modifyAttributes(userName, mods);

        System.out.println("Changed Password for: " + userName);    
        ctx.close();

    } 
    catch (NamingException e) {
        System.err.println("Problem changing password: " + e);
    }
    catch (UnsupportedEncodingException e) {
        System.err.println("Problem encoding password: " + e);
    }
}
} 

错误消息:

共有1个答案

满元凯
2023-03-14

您导入了哪个证书?您不需要服务器证书。相反,您需要证书颁发机构的公钥。具体地说,开关-trustcacerts表示这是一个CA公钥。

通过名字猜测,不知道你是不是抓到了服务器的证书。

 类似资料:
  • 问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案:

  • 我正在使用带有自签名证书的ActiveMQ Artemis 2.17.0复制。在尝试更新到2.18.0之后,我意识到我的证书有问题(请参见本线程)。代理和客户端之间没有SSL连接。

  • 我正在努力为SSL证书供应商中的交换机做准备。 对于SSL验证,我们的Tomcat web应用程序使用从DigiCert证书(*.cer文件)创建的JKS文件。我们公司下周将改用VeriSign。因为他们已经提供了新的*。cer文件,我可以简单地将新证书(使用keytool)添加到现有的JKS中,以便它对两个证书都有效。我试图避免在切换过程中停机,并提前准备服务器? 任何帮助将不胜感激。

  • 我一直试图帮助我们的一个网站处理他们在使用GlassFish的应用程序时得到的错误消息。当登录到应用程序时,将引发以下错误: 在server.log中,显示以下内容: 0400Severeglassfish3.1com.sun.grizzly.config.grizzlyServiceListener_threadid=287;_threadname=thread-1;由于keystore被篡改或

  • 问题内容: 如果我在Mac或Linux中拥有实际的文件和Bash shell,如何查询cert文件何时到期?假设我有csr,key,pem和chain文件,则不是网站,而是证书文件本身。 问题答案: 与: 输出形式为: 以了解如何轻松地检查证书是否已过期,或者证书是否将在一定时间段内,而不必解析上述日期。

  • 我最近为我的网站购买了ann SSL证书,在生成密钥库时遇到了一些奇怪的事情。在Godaddy教程中,它说要导入根证书,安装中间证书,并将颁发的证书安装到密钥库中。 从GoDaddy下载文件时,虽然它给了我三个。crt文件。一个文件名为十六进制,这是实际的证书,另外两个文件名为:gdig2。crt和gd_束-g2-g1。crt。 我该如何使用导入这些文件的方式呢? 注意:当查看bundle文件时,