keytool list -rfc -keystore 查看证书信息

如果直接把证书放在客户端感觉不安全,可以采用如下的形式,或者从服务器端返回的形式实现

C:\Users\DELL\Desktop>keytool -list -rfc -keystore C:\Users\DELL\Desktop\coffee.keystore
输入密钥库口令:

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: tomcat
创建日期: 2017-1-3
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
-----BEGIN CERTIFICATE-----
MIIDqDCCApCgAwIBAgIEJVYh6DANBgkqhkiG9w0BAQsFADB8MRAwDgYDVQQGEwdVbmtub3duMRAw
DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD
VQQLEwdVbmtub3duMSAwHgYDVQQDExctZXh0IFNBTj1pcDoxMC4xMDAuMC43MTAeFw0xNzAxMDMw
MjI5MjhaFw0xNzA0MDMwMjI5MjhaMHwxEDAOBgNVBAYTB1Vua25vd24xEDAOBgNVBAgTB1Vua25v
d24xEDAOBgNVBAcTB1Vua25vd24xEDAOBgNVBAoTB1Vua25vd24xEDAOBgNVBAsTB1Vua25vd24x
IDAeBgNVBAMTFy1leHQgU0FOPWlwOjEwLjEwMC4wLjcxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEA0xwKsYrfXlT+ipLnfTxq9yLc2Jga7yV0dzRkcbYO4DUS1jTvGbjN4vZkQMfAGJ26
UQU1/91T3Ik5FEhSooXfg8GDn3rav09MHkW3zIt/C5hiUjubqkXUbvsxreua8DM+89lWeNqPHnzy
X6c49AaTUMdnhFuQO9Sl+ps6yRhj/BQGvhlwzemDAkhPQiupLTSJ+Hlw/VJiyhgQdhfaFpmrBaTf
SeH2LuZVYHXukv798Cv0EXRq1I9erc78JzLQtRgx7j4+M6av/oJQNqv2Eex5xNGBqR6O14bVdnIl
I8nMBbqqpAvrj27ZPXqj7RnutE45EgobRMwJKKxD1oH17CTvVQIDAQABozIwMDAPBgNVHREECDAG
hwQKZABHMB0GA1UdDgQWBBRs4FL5PHZDufIq3ZrtoYtcb2PlGjANBgkqhkiG9w0BAQsFAAOCAQEA
O1LV9wLu+cvNwitITB22EsSXlkBDDBIa19AUr4mtOdpVKPioG94LOO/j9NinUbGj1sw/Bsj847II
11M33KCEOM7XOrkIrB1FeWEbFP0B7mi65X/Vh4UCpB4ObRgNXdqTL/yegxnRrbOmf7q+K1iwK8pI
NKUTiX40L/7hz8MSMr9q51XpXJeON10s+Wm8Da5KpMnU6IE+W+aM7XtzYEk3Z4qKKFbrvm1RuyS4
+Ks46XH01JuaktrTutGxtmxEZn1AQVnylpIAJljJ3fyU71BXTgcXotmPgxdxQanZ5fo/ImjrOi27
9P7qS/dMI2wlSmThr00/QamOEEnl8Mq5DGmT5g==
-----END CERTIFICATE-----


*******************************************
*******************************************


注意创建证书的时候 不能包含-----BEGIN CERTIFICATE-----  -----END CERTIFICATE----- 字符串


/**
	 * 信任所有的证书
	 */
	static class MyX509TrustManager2 implements X509TrustManager {
		// 证书
		private X509Certificate certificate;

		public MyX509TrustManager2() {
			try {
				String data = // "-----BEGIN CERTIFICATE-----" + //
				"MIIDrDCCApSgAwIBAgIEN/LGmzANBgkqhkiG9w0BAQsFADB+MRAwDgYDVQQGEwdVbmtub3duMRAw" + //
						"DgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYDVQQKEwdVbmtub3duMRAwDgYD" + //
						"VQQLEwdVbmtub3duMSIwIAYDVQQDExktZXh0IFNBTj1pcDoxOTIuMTY4LjEuMTAwMB4XDTE3MDEw" + //
						"MTEyMDg1M1oXDTE3MDQwMTEyMDg1M1owfjEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMHVW5r" + //
						"bm93bjEQMA4GA1UEBxMHVW5rbm93bjEQMA4GA1UEChMHVW5rbm93bjEQMA4GA1UECxMHVW5rbm93" + //
						"bjEiMCAGA1UEAxMZLWV4dCBTQU49aXA6MTkyLjE2OC4xLjEwMDCCASIwDQYJKoZIhvcNAQEBBQAD" + //
						"ggEPADCCAQoCggEBAJknPBkBGO2hNwXH12/WnN3bqnGTMstTb2RswLHRnMW4PHtGu2SEIfjgR/Oa" + //
						"GiB+CqLeI8Uycljxfz6Rmd4/izCkUTuxkZaaKM6xxI8wC4HpfEjWGhFJJNFCJWkpZW9P6uCZxsBd" + //
						"g/rPDoPd0BxQ3h1CHDeOYE3b/7Po7+6CAD2uwSKqnsjmQEuW+2VE4Aik5wq9Onux04Bv8ORIeGTt" + //
						"OhaomaY3ICTidh+823/AWV62Lixa9JVt5ZepLmM4F3Nv61x2XJTX5eMrthbHDXO8LSUj7eCOlerF" + //
						"2vZ6o8ZPOlPw2c6jMgUtYOP4NH3h3CsCrWwSj/D3J3xGMacC9uzLMK8CAwEAAaMyMDAwDwYDVR0R" + //
						"BAgwBocEwKgBZDAdBgNVHQ4EFgQUcQv0JNB8o2JWLcpHyAjzcXqd7ocwDQYJKoZIhvcNAQELBQAD" + //
						"ggEBAAweijP9d+mWWsuIn8Wx7XMNhmsA4HWXwxSlXY/1lzIfmWrGooi8UqoPlw/VZj2e9zvSOaFv" + //
						"pqAWdgMSD8tPL2ExTZs54pWaBewEnwN9qht0ka7JjHx1pC8cNpqkhUBWnR4J85go1C8AypZvFSJr" + //
						"FtHMSf7KJO4ecTFAZ7/BCsaEzeUF+ToNR/eWlhmabZi9r+MxtJi7538yWuKYAdkIv0BtpdEnOWf7" + //
						"L76mWOnifZ/uM7l9ef9uqv4Uc2CW7iR0zm+J7czXGF+XYCl2qmDWyl0JKHHM8PUTBkoj5oXMHdiF" + //
						"5GI9+5CDKiujKZIncTeuSjrx2706a0wdSf981tqeae8="; //
				// "-----END CERTIFICATE-----";
				byte[] byteData = new sun.misc.BASE64Decoder().decodeBuffer(data);
				InputStream fin = new ByteArrayInputStream(byteData);
				CertificateFactory cf = CertificateFactory.getInstance("X.509");
				certificate = (X509Certificate) cf.generateCertificate(fin);
				fin.close();
			} catch (CertificateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		@Override
		// for server only
		public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			// 我们在客户端只做服务器端证书校验。
		}

		@Override
		// only trust the given certificate or certificate issued by it
		public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			// 确认服务器端证书的 Intermediate CRT 和代码中 hard code 的 CRT 证书主体一致。
			if (!chain[0].getIssuerDN().equals(certificate.getSubjectDN())) {
				throw new CertificateException("Parent certificate of server was different than expected signing certificate");
			}
			try {
				// 确认服务器端证书被代码中 hard code 的 Intermediate CRT 证书的公钥签名。
				chain[0].verify(certificate.getPublicKey());
				// 确认服务器端证书没有过期
				chain[0].checkValidity();
			} catch (Exception e) {
				throw new CertificateException("Parent certificate of server was different than expected signing certificate");
			}
		}

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return new X509Certificate[0];
		}

	};


sun.misc.BASE64Decoder
在eclipse中默认是不可访问的, 需要修改 access rules


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值