java ssl_Java SSL 证书细节

本文详细介绍了Java SSL证书的相关实践,包括证书的生成、格式转换、单向认证的实现以及SSLContext的初始化。通过示例代码展示了如何使用Keytool和openssl生成不同格式的证书,以及如何在Java中处理公钥和私钥。此外,文章还讨论了SSL脱离Socket进行加密的可能性,并提供了从服务器端获取证书的代码示例。
摘要由CSDN通过智能技术生成

关于SSL这块,网上很多,但很多都是讲原理或怎么生成证书实现简单通信,没有讲到实践时的诸多细节。

SSL, 即Secure Sockets Layer 安全套接层。本文介绍SSL的一些常见问题,用的语言主要是Java。

首先明确SSL的目的,就是加密。就是在Socket的基础上增加安全性。一般来讲,就是避免客户端向服务端传输数据时,被人拦截篡改,避免所谓的中间人攻击,防范钓鱼网站。

关于它的基础概念,可以看

【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

【下】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

问题1:证书生成和格式

网上搜索SSL,有很多生成证书的教程。可是会发现有的是用Java的Keytool生成的cer,有的是用openssl来生成的pem。这是为什么呢?其实这些证书本质是一样的,只是文件格式不一样。所以如果想在Java里使用pem格式的证书,就要转化。转化的方式在这个问题里已有回答:

Convert a PEM-formatted String to a java.security.cert.X509Certificate

另外,公钥和私钥分别以什么形式存在?公钥存在于证书文件中,私钥存在于Keystore文件中。注意Java里的Keystore类可以是有私钥的Keystore,也可以是只有公钥的Keystore。

还有,为什么使用Java keytool生成的证书要设置密码?这个密码是JKS文件的密码,注意不是公钥或私钥哦,是用于防范别人随便乱拿的。

问题2:既然是加密,那么可不可以脱离Socket存在?

可以。可以直接使用公钥来加密数据,再用私钥解密数据。具体方法参考:

Java加密技术(八)——数字证书

问题3:单向认证,即只确认服务端是否真实可靠的话,要做什么?以SSLSocket举例。

如果只需要信任自己生成的证书

代码:

public class TestSSLSocketClient {

private static String path = "e:\\keytool\\sslclient.keystore";

private static char[] password = "aaaaaaa".toCharArray();

/**

* @param args

*/

public static void main(String[] args) {

SS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值