1. java軟體工程師證書作用幾年是永久性的嗎
你是達內出來發的那個嗎?完全沒用,勸你別拿出去給別人看,以免別人笑你
2. JAVA證書過期了怎麼辦
只要把手機本機的日期調後就可以了,
3. 如何利用java來調用證書(如何實現獲取證書公鑰以及客服信任號)
package com.security;
import java.io.*;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.math.*;
import sun.security.x509.*;
/**
* <>Description: 該程序根據簽發者(CA)的證書信息(即CA的私鑰)來對被簽發者
* 的證書進行簽名,過程即是使用CA的證書和被簽證書來重構形成一個新的證書</p>
* @author abnerchai
* @version 1.0
*/
public class SignCert {
public static void main(String[] args) throws Exception{
char[] storepass = "100200".toCharArray();
//存放CA證書和被簽證書的證書庫的訪問密碼
char[] cakeypass = "200100".toCharArray();//CA數字證書條目的訪問密碼
String alias = "missionCA";
//CA證書在證書庫中的別名,這個CA的證書用來簽名其它的證書
String name = "abnerCALib";//存放CA證書和被簽證書的證書庫的名字
String newLib = "SignedLib";
//新證書庫的名字,如果需要將簽名後的證書放入新庫,這是新庫的名字
char[] newLibPass = "100200".toCharArray();//設置新庫的訪問密碼
String cerFileName = "abnerCA.cer";//被簽證書的證書文件名
String aliasName = "abnerCA";//被簽證書在證書庫中的alias別名
char[] namePass = "200100".toCharArray();
//被簽證書的條目在證書庫的私鑰密碼
int n =3; //被簽證書的有效期,以年為單位,以當前時間開始計算
int sn = 200406001;
//序列號可自己定義,這里定義的意義為2004年6月簽發,是本年度CA簽發的第多少個以001計算,要求唯一
String afteraliasName = "abnerCA_Signed";
//簽名後新產生的被簽過名的證書在庫中的別名
char[] afterNewPass = "200100".toCharArray();
//簽名後新產生的被簽過名的證書在庫的條目的私鑰的密碼
//裝載證書庫
FileInputStream in = new FileInputStream(name);
KeyStore ks = KeyStore.getInstance("JKS");//JKS為證書庫的類型
ks.load(in,storepass);
//從證書庫中讀出簽發者(CA)的證書
java.security.cert.Certificate cl = ks.getCertificate(alias);
//讀出一個CA證書,這里的l是字母l不是數據字1
PrivateKey privateKey = (PrivateKey)ks.getKey(alias,cakeypass);
//根據別名和證書密碼讀出CA證書的私鑰
in.close();
//從證書庫中讀出的簽發者(CA)的證書中提取簽發者的信息
byte[] encodl = cl.getEncoded();//提取證書的編碼,這里是字母l不是數據字1
X509CertImpl cimpl = new X509CertImpl(encodl);
//這里是字母l不是數據字1,根據證書的編碼創建X509CertImpl類型的對象
//根據上面的對象獲得X509CertInfo類型的對象,該對象封裝了證書的全部內容。
X509CertInfo cinfo_first =
(X509CertInfo)cimpl.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);
//然後獲得X500Name類型的簽發者信息
X500Name issuer = (X500Name)
cinfo_first.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME);
//獲取待簽發的證書,即獲取被簽發者的證書
//可從密鑰庫中獲取,也可從導出的證書文件中獲取,這里給出兩種方式 ////////////////////////////////////////////////////////////////////////
//方式一、採用從導出的cer文件中獲取 start
///////////////////////////////////////////////////////////////////////////////
/*
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//X.509是使用最多的一種數字證書標准
FileInputStream in2 = new FileInputStream(cerFileName);//被簽證書文件
java.security.cert.Certificate c2 = cf.generateCertificate(in2);
//生成需要被簽的證書
in2.close();
byte[] encod2 = c2.getEncoded();
X509CertImpl cimp2 = new X509CertImpl(encod2);
//獲得被簽證書的詳細內容,然後根據這個證書生成新證書
X509CertInfo cinfo_second =
(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);
*/
///////////////////////////////////////////////////////////////////////////////
//end 方式一
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//方式二、從證書庫中讀出被簽的證書 start
///////////////////////////////////////////////////////////////////////////////
java.security.cert.Certificate c3 = ks.getCertificate(aliasName);
//從證書庫中讀出被簽證書,然後生成新的證書
byte[] encod3 = c3.getEncoded();
X509CertImpl cimp3 = new X509CertImpl(encod3);
X509CertInfo cinfo_second =
(X509CertInfo)cimp3.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); ///////////////////////////////////////////////////////////////////////////
//end方式二
/////////////////////////////////////////////////////////////////////////// //設置新證書的有效期,使之為當前向後n年有效,新證書的
//截止日期不能超過CA證書的有效日期
Date beginDate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(beginDate);
cal.add(cal.YEAR,n);
Date endDate = cal.getTime();
CertificateValidity cv = new CertificateValidity(beginDate,endDate);
cinfo_second.set(X509CertInfo.VALIDITY,cv);
//設置新證書的序列號
CertificateSerialNumber csn = new CertificateSerialNumber(sn);
cinfo_second.set(X509CertInfo.SERIAL_NUMBER,csn);
//設置新證書的簽發者
cinfo_second.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);
//新的簽發者是CA的證書中讀出來的
//設置新證書的演算法,指定CA簽名該證書所使用的演算法為md5WithRSA
AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo_second.set(CertificateAlgorithmId.NAME+"."+
CertificateAlgorithmId.ALGORITHM,algorithm);
//創建新的簽名後的證書
X509CertImpl newcert = new X509CertImpl(cinfo_second);
//簽名,使用CA證書的私鑰進行簽名,簽名使用的演算法為MD5WithRSA
newcert.sign(privateKey,"MD5WithRSA");//這樣便得到了經過CA簽名後的證書
//把新證書存入證書庫
//把新生成的證書存入一個新的證書庫,也可以存入原證書庫,
//存入新證書庫,則新證書庫中不僅包含原證書庫中的所有條目,
//而且新增加了一個這次產生的條目。注意,這時,新產生的簽名後的證書只
//包括公鑰和主體信息及簽名信息,不包括私鑰信息。這里給出兩種方式。
///////////////////////////////////////////////////////////////////////////
//方式一:存入新密鑰庫
///////////////////////////////////////////////////////////////////////////
/*
ks.setCertificateEntry(afteraliasName,newcert);
FileOutputStream out = new FileOutputStream(newLib);
//存入新庫signedLib,並設置新庫的庫訪問密碼
ks.store(out,newLibPass);
out.close();
*/
///////////////////////////////////////////////////////////////////////////
//end 方式一
///////////////////////////////////////////////////////////////////////////
//也可以採用另外一種方式,存入原證書庫中
//存入原庫中,即在原證書庫中增加一條證書,這個證書是原證書經過簽名後的證書
//這個新證書含有私鑰和私鑰密碼
///////////////////////////////////////////////////////////////////////////
//方式二,存入原密鑰庫
///////////////////////////////////////////////////////////////////////////
//先在原庫中讀出被簽證書的私鑰
PrivateKey prk = (PrivateKey)ks.getKey(aliasName,namePass);
java.security.cert.Certificate[] cchain = {newcert};
//存入原來的庫,第二個參數為原證書的私鑰,第三個參數為新證書的私鑰密碼,第三個參數為新證書
ks.setKeyEntry(afteraliasName,prk,afterNewPass,cchain); //用新密鑰替代原來的沒有簽名的證書的密碼
FileOutputStream out2 = new FileOutputStream(name);
ks.store(out2,storepass);//存入原來的庫中,第二個參數為該庫的訪問密碼
///////////////////////////////////////////////////////////////////////////
//end 方式二
///////////////////////////////////////////////////////////////////////////
}
}
4. 在java中如何獲取有效時間
給你寫出來了,System.out.println(w.daycount(20130723, 20130729));
休息日
Sat Jul 27 00:00:00 CST 2013
休息日
Sun Jul 28 00:00:00 CST 2013
工作專日總共屬有5天
5. java 獲取的cookie 有效時間多久
可以自己設置:
java 設置cookie
protected void saveCookie(String name, String value, int maxAge)
{
專javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(name,
value);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
後台cookie設置失效屬
Cookie cookie = new Cookie("JSESSIONID", "");
cookie.setMaxAge(0);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
6. 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,密碼是:changeit
3、根據運行提示信息,輸入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();
好吧,兩種方法都試過有效。
7. 用java生成的證書有時間限制嗎
有
:可以從目標機器獲得有效證書或者忽略證書信任問題
8. 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;
}
9. 如何用Java讀取使用證書
Java為安全應用提供了豐富的API,J2SDK1.4 的JSSE (JavaTM Secure Socket Extension) 包括javax.security.certificate包,並且提供對證書的操作方法,代碼如下:
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.table.*;
importjava.security.cert.CertificateFactory;
importjava.security.cert.X509Certificate;
importjava.io.*;
{
privateStringCA_Name;
privateStringCA_ItemData[][]=newString[9][2];
privateString[]columnNames={"證書欄位標記","內容"};
publicCARead(StringCertName){
CA_Name=CertName;
/*三個Panel用來顯示證書內容*/
JTabbedPanetabbedPane=newJTabbedPane();
JPanelpanelNormal=newJPanel();
tabbedPane.addTab("普通信息",panelNormal);
JPanelpanelAll=newJPanel();
panelAll.setLayout(newBorderLayout());
tabbedPane.addTab("所有信息",panelAll);
JPanelpanelBase64=newJPanel();
panelBase64.setLayout(newBorderLayout());
tabbedPane.addTab("Base64編碼信息",panelBase64);
/*讀取證書常規信息*/
Read_Normal(panelNormal);
/*讀取證書文件字元串表示內容*/
Read_Bin(panelAll);
/*讀取證原始Base64編碼形式的證書文件*/
Read_Raw(panelBase64);
tabbedPane.setSelectedIndex(0);
setLayout(newGridLayout(1,1));
add(tabbedPane);
}
}
定義證書信息的讀取函數如下:
privateintRead_Normal(JPanelpanel){
StringField;
try{
CertificateFactorycertificate_factory=CertificateFactory.getInstance("X.509");
FileInputStreamfile_inputstream=newFileInputStream(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();
finalJTabletable=newJTable(CA_ItemData,columnNames);
TableColumntc=null;
tc=table.getColumnModel().getColumn(1);
tc.setPreferredWidth(600);
panel.add(table);
}catch(Exceptionexception){
exception.printStackTrace();
return-1;
}
return0;
}
10. java程序證書過期怎麼辦
你是不是安裝軟體時證書過期??? 改手機日期!看看你那個軟體是什麼時候出的!把日期調低到那個軟體日期就可以啦!