我在唱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);
}
}
}
错误消息:
您导入了哪个证书?您不需要服务器证书。相反,您需要证书颁发机构的公钥。具体地说,开关-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文件时,