java代码加载证书 java导入证书

如何通过java程序来加载客户端证书进行ssl连接?用WS-Security对.NET 和 Java之间的Web服务请求进行签发到底为了对Web服务请求进行签发可以保证消息内容在传输期间没有被修改 。使用数字证书 , 可以用一个私钥对Web服务进行签发,这样只能用相应的公钥对消息进行校验 。
到目前为止,Web服务的安全策略有两种选择: 一种是在传输层(使用 SSL),另一种是在应用层,使用自定制的安全机制 。这两种方法虽然技术上有效,在采用时均有一些限制与缺点 。
在传输层使用SSL而获得的安全性是通过对底层的传输层(HTTP)进行安全化而确保Web服务请求的完整性 。. SSL 既可以用于加密链接,也可以用于使用证书来校验客户端和服务器 。
使用SSL来保护Web服务的一个主要问题之一就是其安全性只在一个单独的节点到另一个节点之间有效 。由于SSL通信是基于传输层 , 一旦到达终端节点 , 这种保护消息的方法就不再有效了 。. 例如,我从Client A 向 Server B发送一个消息,并使用SSL来保护链接 。然而,如果我从Client A 向 Server C发送一条信息 , 并且必须经过Server B,这时就没有容易的办法来确保使用SSL通过这一媒介的传输消息的安全性 。
也可以开发一种自定制的安全机制,将消息的内容和消息头在客户端进行签发,并在服务器端进行校验 。这种办法可以克服传输安全问题,但最终这将是一种自定制的解决方案 。. 如果一个组织希望保护发布到其它组织的Web服务,则他必须确保另一终端节点也使用了相同的技术 。
WS-Security 通过提供一种基于应用层的Web服务签发方式来解决这两个问题(避免在传输层进行安全化时遇到的安全问题),它使用了一个已经公布的标准,可以由客户、系统集成商和销售商参考和采用 。
为了帮助推动这一标准 , 本文将演示一系列两个WS-Security实现之间进行Web签发的示例: 一个位于 Microsoft .NET, 基于 Microsoft Web Services Enhancements (WSE) 1.0, 另一个基于GLUE Professional 4.0.1 。
如何用Java代码来把SSL的证书自动导入到Jav下面这个Java类可以帮助我们做这个事情 。同时我们还可以把这个帮助方法开发一个可视化的程序,这样就更加方便:
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.security.KeyStore;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import java.util.List;import javax.naming.ldap.LdapName;import javax.naming.ldap.Rdn;import javax.security.auth.x500.X500Principal;public class KeyStoreHelper { public static void createTrustJKSKeyStore(final String originalTrustFolder,final String jksTrustStoreLocation, final String password) {File keyStoreFile = new File(jksTrustStoreLocation);if (!keyStoreFile.exists()) {try {KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());keystore.load(null, password.toCharArray());File trustedFolder = new File(originalTrustFolder);File[] certs = trustedFolder.listFiles();if (certs != null) {for (File cert : certs) {CertificateFactory factory = CertificateFactory.getInstance("X.509");try {X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream(cert));X500Principal principal = certificate.getSubjectX500Principal();LdapName ldapDN = new LdapName(principal.getName());ListRdn rdns = ldapDN.getRdns();for (Rdn rdn : rdns) {String type = rdn.getType();if (type.equals("CN")) {keystore.setCertificateEntry((String) rdn.getValue(),certificate);break;}}} catch (Exception ex) {continue;}}}FileOutputStream fos = new FileOutputStream(jksTrustStoreLocation);keystore.store(fos, password.toCharArray());fos.close();} catch (Exception exp) {}} } /*** @param args*/ public static void main(String[] args) {KeyStoreHelper.createTrustJKSKeyStore("D:\\cacerts", "D:\\cacerts\\test.jks", "test123"); }}
如何用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);
【java代码加载证书 java导入证书】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;
}
java代码加载证书的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java导入证书、java代码加载证书的信息别忘了在本站进行查找喔 。

    推荐阅读