A. java无法验证证书怎么解决
你的问题是不是"由于无法验证发行者,所以windows已经阻止此软件"如要安装未签名的activex控件,按如下步骤:1、打开Internet Explorer---菜单栏点“工具”---Internet选项--安全---自定义级别---安全设置---“ActiveX控件和插件下”的第5个“
B. https证书到期会影响java请求么
会
在java代码中请求https链接的时候,可能会报下面这个错误
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
原因是没有证书。在浏改斗配览器中直接使用url访问是可以的,应该是浏览器之前就保存过对应的.cer证书。
解决方法有两种,从目标机器获得有效证书或者忽略证书信任问题。
一、获得目标机器有效证书
1、编译安装证书程序 javac InstallCert.java
2、运行安装证书程序生成证书
java InstallCert my.hoolai.com
例如:java InstalCert smtp.zhangsan.com:465 admin
如果不加参数password和host的端口号,上面的获取证书程序中默认给的端口号是:443,密码是:changeit3、根据运行提示信息,输入1,回车,在当前目录下生成名为: jssecacerts 的证书
将证书放置到$JAVA_HOME/jre/lib/security目录下, 切记该JDK的jre是工程所用的环境!!!
或者:
System.setProperty("javax.net.ssl.trustStore", "你的jssecacerts证书路径");
可以更改密码,在security目录下运行命令
keytool -storepasswd -new xxxcom -keystore cacerts
就可以修改密码,修改后使用命核指令
keytool -list -v -keystore cacerts
查看文件的信息,会提示需要密码才能查看,如果输入密码与修改后的密码匹配,说明修改成功了。
PS:至此这种方式可以成功使用ssl了,另外再补充一下,根据刚才生成的文件jssecacerts,可以生成cer文件,
命令如下
keytool -export -alias xxx.com-1 -keystore jssecacerts -rfc -file xxx.cer
如上,之前的工具类中默认命名别名是加上"-1"。使用InstallCert设置的密码需要跟cacerts文件中的密码一致,
如果修改过密码,就需要修改InstallCert类中对应的密码字符串,否则会有下面这个异常:
java.security.UnrecoverableKeyException: Password verification failed
二、忽略证书信任问题
源码:http://mengyang.iteye.com/blog/575671
一定要注意需要在connection创建之前调用文章里所述的方法,像这个样子:
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
connection = (HttpURLConnection) url.openConnection();
好吧,两种方法都试过有效销旅。
C. 如何用Java读取使用证书
证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的、可以用来当成信任关系中介的数字凭证。证书发行机构通过发行证书告知证书使用者或实体其公钥(public-key)以及其它一些辅助信息。证书在电子商务安全交易中有着广泛的应用,证书发行机构也称CA(Certificate Authority)。
应用证书
证书在公钥加密应用中的作用是保证公钥在某些可信的机构发布,其在协议SSL、电子交易协议SET等方面有重要的应用。图1显示了一个最简单的证书应用方法:
图1 证书应用方法
证书的应用步骤是:
(1) A把自己的公钥PKA送到CA(Certificate Authority);
(2) CA用自己的私钥和A的公钥生成A的证书,证书内包括CA的数字签名。签名对象包括需要在证书中说明的内容,比如A的公钥、时间戳、序列号等,为了简化这里不妨假设证书中只有三项内容:A的公钥PKA、时间戳TIME1、序列号IDA。那么CA发送给A的简单证书凭证可表达为:CertA=Eca[TIME1,IDA,PKA];
(3) B同样把自己的公钥PKB送到CA;
(4) B得到CA发布的证书CertB;
(5) A告知B证书CertA;
(6) B告知A证书CertB。
A、B各自得到对方证书后,利用从CA得到的公钥(在CA的自签证书中)验证彼此对方的证书是否有效,如果有效,那么就得到了彼此的公钥。利用对方的公钥,可以加密数据,也可以用来验证对方的数字签名。
本文为了方便说明,并没有使用从CA获得的证书,而是通信双方各自产生自签证书,也就是说图1的A和B并没有经过CA,不过前提是A和B之间是互相拥有对方的证书。
D. 用java做一个httpClient 发送https 的get请求,需要证书验证的那种,求大神指点一下!
你那个 SSLSocketFactory(ks) 是自己的类?
你有用过 KeyManager.init (...)? 和 TrustManager.init(...) ?
想要在连接建立过程上交互式的弹出确认对话框来的话回需要我们自己答提供一个 KeyManager 和 TrustManager 的实现类,这有点复杂,你可以看一个 Sun 的 X509KeyManager 是怎么做的,默认地情况下它是从自动搜索匹配的 subject ,我们需要用自己提供的方式弹出确认的过程还不是全自动,另外一个账户可能有多个数字证书,比如支付宝我们就有多个签发时间不一样的数字证书,在连接建立时 IE 会提示我们选择其中的一个来使用,银行的 U 盾在安装多张数字证书时也会提示我们选择其中一个对应到你正在使用的银行卡号的那张证书。
E. 如何用Java读取使用证书
Java为安全应用提供了丰富的API,J2SDK1.4 的JSSE (JavaTM Secure Socket Extension) 包括javax.security.certificate包,并且提供对证书的操作方法,代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.io.*;
public class CARead extends JPanel {
private String CA_Name;
private String CA_ItemData[][] = new String[9][2];
private String[] columnNames = {"证书字段标记","扰芦内容" };
public CARead(String CertName) {
CA_Name=CertName;
/* 三个Panel用来显示证书内容*/
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panelNormal = new JPanel();
tabbedPane.addTab("普通信息", panelNormal);
JPanel panelAll=new JPanel();
panelAll.setLayout(new BorderLayout());
tabbedPane.addTab("所有信息",panelAll);
JPanel panelBase64=new JPanel();
panelBase64.setLayout(new BorderLayout());
tabbedPane.addTab("橘槐Base64编码信息",panelBase64);
/* 读取证书常规信息 */
Read_Normal(panelNormal);
/* 读取证书文件字符串表示内容 */
Read_Bin(panelAll);
/* 读取证原始Base64编码形式的证书缓伍带文件 */
Read_Raw(panelBase64);
tabbedPane.setSelectedIndex(0);
setLayout(new GridLayout(1, 1));
add(tabbedPane);
}
}
定义证书信息的读取函数如下:
private int Read_Normal(JPanel panel){
String Field;
try{
CertificateFactory certificate_factory=CertificateFactory.getInstance("X.509");
FileInputStream file_inputstream=new FileInputStream(CA_Name);
X509Certificate
x509certificate=(X509Certificate)certificate_factory.generateCertificate
(file_inputstream);
Field=x509certificate.getType();
CA_ItemData[0][0]="类型";
CA_ItemData[0][1]=Field;
Field=Integer.toString(x509certificate.getVersion());
CA_ItemData[1][0]="版本";
CA_ItemData[1][1]=Field;
Field=x509certificate.getSubjectDN().getName();
CA_ItemData[2][0]="标题";
CA_ItemData[2][1]=Field;
/* 以下类似,这里省略
Field=x509certificate.getNotBefore().toString();得到开始有效日期
Field=x509certificate. getNotAfter().toString();得到截止日期
Field=x509certificate.getSerialNumber().toString(16);得到序列号
Field=x509certificate.getIssuerDN().getName();得到发行者名
Field=x509certificate.getSigAlgName();得到签名算法
Field=x509certificate.getPublicKey().getAlgorithm();得到公钥算法 */
file_inputstream.close();
final JTable table = new JTable(CA_ItemData, columnNames);
TableColumn tc=null;
tc = table.getColumnModel().getColumn(1);
tc.setPreferredWidth(600);
panel.add(table);
}catch(Exception exception){
exception.printStackTrace();
return -1;
}
return 0;
}
F. java https 证书 java 实现https请求
JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问。但是回,如果该站点的证书答未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站点。建议到权威CA机构去申请一受信任的免费https证书来使用,比如wosign免费多域名https证书等。
G. 如何生成证书请求或如何自动安装用户证书Java的
你会用XEnroll就好办,XEnroll的CreatePKCS10方法就是用来生成证书请求的。
H. 手机java软件总么弄证书 方法或者是步骤 。。。 谢谢.
第1步:每天渣培中午11点去塞班论坛申请证书,下载“塞班专用签名工具”和“专用key”,并在电脑里安装签名工如旅唯具。
第2步:导入证书,导入key(用鼠标右键点击)
第3步:签名。选镇碧中需要签名的软件,点击鼠标右键,“签名此文件”或“签名全部文件”。
I. 在java中使用安全证书的问题
在项目开发中,有时会遇到与SSL安全证书导入打交道的,如何把证书导入java中的cacerts证书库呢?
其实很简单,方法如下:
每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来,
在该网页上右键 >> 属性>> 点击"证书">>
再点击上面的"详细信息"切换栏 >>
再点击右下角那个"复制到文件"的按钮
就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。
例如:保存为abc.cer,放在C盘下
第二步:如何把上面那步的(abc.cer)这个证书导入java中的cacerts证书库里?
方法如下
假设你的jdk安装在C:\jdk1.5这个目录,
开始 >> 运行>> 输入cmd 进入dos命令行>>
再用cd进入到C:\jdk1.5\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file d:\software\AKAZAM-Mail.cer
此时命令行会提示你输入cacerts证书库的密码,
你敲入changeit就行了,这是java中cacerts证书库的默认密码,
你自已也可以修改的。
导入后用-list查看(没有使用-alias指定别名,所以是mykey),其中md5会和证书的md5对应上。
mykey, 2012-10-26, trustedCertEntry,
认证指纹 (MD5): 8D:A2:89:9A:E4:17:07:0B:BD:B0:0C:36:11:39:D0:3D
ok,大功告成!
以后更新时,先删除原来的证书,然后导入新的证书
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts
自定义文件和密码路径,还没有验证:
Define the TrustStore using the JAVA_OPTS variable on the Stash Server:
You will have to do the following:
On Windows:
JAVA_OPTS = -Djavax.net.ssl.trustStore="%JAVA_HOME%\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
On Linux:
JAVA_OPTS = -Djavax.net.ssl.trustStore="$JAVA_HOME/jre/lib/security/cacerts" -Djavax.net.ssl.trustStorePassword="changeit"
(info) On my local instance trustStore password is changeit so I belive, if you didn´t changed it, your is changeit as well.
tomcat、junit运行时会从默认路径加载cacerts文件,如果main函数直接运行需要指定javax.net.ssl.trustStore文件路径,比如:
java -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -jar XXX.jar &
J. Java处理PFX格式证书
在Security编程中 有几种典型的密码交换信息文件格式: DER encoded certificate: cer crt PEM encoded message: pem PKCS# Personal Information Exchange: pfx p PKCS# Certification Request: p PKCS# cert request response: p r PKCS# binary message: p b
cer/ crt是用于存放证书 它是 进制形式存放的 不含私钥 pem跟crt/cer的区别是它以Ascii来表示 pfx/p 用于存放个人证书/私钥 他通常包含保护密码 进制方式 p 是证书请求 p r是CA对证书请求的回复 只用于导入 p b以树状展示证书链(certificate chain) 同时也支持单个证书 不含私钥
其中 我介绍如何从p /pfx文件中提取密钥对及其长度: 首先 读取pfx/p 文件(需要提供保护密码) 通过别名(Alias 注意 所有证书中的信息项都是通过Alias来提取的)提取你想要分析的证书链 再将其转换为一个以X 证书结构体 提取里面的项山姿肢 如果那你的证书项放在第一位(单一证书) 直接读取 x Certs[ ](逗世见下面的代码)这个X Certificate对象 X Certificate对象有很多方法 tain 网友希望读取RSA密钥(公私钥)及其长度(见?topicId= &forumId= &) 那真是太Easy了 X Certificate keyPairCert = x Certs[ ];册裂 int iKeySize = X CertUtil getCertificateKeyLength(keyPairCert); System out println( 证书密钥算法= +keyPairCert getPublicKey() getAlgorithm()); System out println( 证书密钥长度= +iKeySize); 提取了他所需要的信息
package dev dev client keypair;
import java io File; import java io FileInputStream; import java io FileNotFoundException; import java io IOException; import java security KeyStore; import java security KeyStoreException; import java security NoSuchAlgorithmException; import java security NoSuchProviderException; import java security Security; import java security cert Certificate; import java security cert CertificateException; import java security cert X Certificate; import dev dev security keytool X CertUtil;
public class LoadKeyFromPKCS {
public static void main(String[] args) { try { // Open an input stream on the keystore file String pfxFileName = c:\david turing pfx ; String pfxPassword = ;
File fPkcs = null ; if (pfxFileName != null ) { // Open the file fPkcs = new File(pfxFileName); }
FileInputStream fis = new FileInputStream(fPkcs );
// Create a keystore object KeyStore keyStore = null ; try { // Need BC provider for PKCS # BKS and UBER if (Security getProvider( BC ) == null ) { throw new Exception( 不能Load入BouncyCastle! ); }
keyStore = KeyStore getInstance( PKCS BC ); } catch (KeyStoreException ex) { throw new Exception( 不能正确解释pfx文件! ); } catch (NoSuchProviderException ex) { throw new Exception( Security Provider配置有误! ); }
try { // Load the file into the keystore keyStore load(fis pfxPassword toCharArray()); } catch (CertificateException ex) { throw new Exception( 证书格式问题! ); } catch (NoSuchAlgorithmException ex) { throw new Exception( 算法不支持! ); } catch (FileNotFoundException ex) { throw new Exception( pfx文件没找到 ); } catch (IOException ex) { throw new Exception( 读取pfx有误! ); }
// 获取我的证书链的中keyEntry的别名 Certificate[] certs = keyStore getCertificateChain( david turing ); X Certificate[] x Certs = nvertCertificates(certs);
if (x Certs == null ) { return ; }
x Certs = X CertUtil orderX CertChain(x Certs);
X Certificate keyPairCert = x Certs[ ];
int iKeySize = X CertUtil getCertificateKeyLength(keyPairCert); System out println( 证书密钥算法= + keyPairCert getPublicKey() getAlgorithm()); System out println( 证书密钥长度= + iKeySize);
} catch (Exception e) { e printStackTrace(); } }
lishixin/Article/program/Java/hx/201311/26970