【Java学习】什么是SSL、TLS、HTTPS

2 篇文章 0 订阅

SSL提供了一套安全加密方法,相当于网络的加密层。

TLS是SSL的升级版,遵循X.509协议。
支持TLS协议的有很多厂商,如OpenSSL,主要用于生成证书,OpenSSL是TLS协议的一种免费实现方案。

颁发者(CA)颁发证书,颁发者需要有权威性、有公信力。颁发证书过程中需要技术手段保证其可信性,即用OpenSSL在颁发者和证书之间建立安全、可信、有权威性的关系。

证书是网站所申请的,由浏览器代替访客查看证书,有证书意味网站是可信任的。

HTTP:用于浏览器和服务器端交换纯文本数据。

对称加密:客户端和服务器都有密码或密钥。
离线加密狗:将密码写在硬件上,服务器对每个用户发放密码,客户端通过插件的形式得到密码,保证了网络上没有密码传输。要求所有用户离线操作。

HTTPS需要第三方下发证书保证安全。

如何实现在对称加密时使用互联网传输密码且密码不外泄? 无法实现,所以有了非对称加密。

非对称加密:加密方和使用方使用的密钥不同(公私钥匙)。私钥上锁,公钥能解,公钥加密,私钥也能解开。当公钥加密数据时,不能用公钥解。

TCP三次握手目的是建立稳定链接。HTTP协议基于TCP协议,HTTPS协议基于TCP+HTTP+SSL协议,SSL协议要求进行第四次握手。

第四次握手的过程中,客户端发送请求(传输加密的方式,没有密码),服务器返回是否支持该加密算法,若服务器支持,返回接受请求的回应和服务器的公钥(用于密码加密)。

客户端用第四次握手中被接受的对称加密算法对数据加密,随机生成生成对称加密的密钥(解开加密数据的密码)后,使用公钥对对称加密的密钥进行加密,生成公钥密文(对称加密的密钥),然后发给服务器。

服务器收到公钥密文后用私钥进行解密,得到对称加密的密钥(即对称加密需要的密码)和加密算法。

这时在传输过程中拦截到的信息只有服务器的公钥和公钥密文,公钥不可以解开公钥加密的数据。

公私钥怎么来:先有私钥,由私钥生成的公钥,生成的过程是由OpenSSL这个工具做的。私钥是纯文本,相当于一个可读的纯文本密码。由私钥作为参数,用OpenSSL生成公钥,使用的典型算法是RSA算法,这个算法保证了公钥加密的数据私钥能解,私钥加密的公钥能解,但公钥加密的公钥不能解。公私钥都是文本,是一对。

客户端到服务器端的传输过程:
客户端------>代理服务器------->服务器
(1)客户端到代理服务器需要交互;(2)代理服务器和服务器交互。

在(2)的情景下,此时代理服务器代替客户端发送和接收信息,代理服务器是真正的客户端。这时代理服务器能拿到 服务器的公钥,客户端拿到代理服务器的公钥。

在(1)的情景下,代理服务器是服务器端。

也就是说这个代理服务器可以两面冒充。
这时需要第三方认证来保证安全。

server端需要申请认证,需要提供域名、邓白氏编码、营业许可。网站+域名,需要证明服务器有网站的持有权。第三方提供证书,内容包含公钥、域名、公司名、签发人。第三方有自己的私钥,用自己的私钥加密以上信息,同时提供了公钥内置在客户端,浏览器内置有CA机构内置的公钥。

这时server向客户端发送的是证书,客户端解密得到证书的明文,从而得到了服务器的公钥。避免中间的代理商替换掉server的公钥,因此需要第三方。

非对称加密效率低于对称加密。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java 中使用 HTTPS 协议与服务器进行通信时,需要使用 TLS(Transport Layer Security)协议来保护通信的安全性。 以下是使用 Java 进行 HTTPS 通信的步骤: 1. 创建 SSL 上下文 在 Java 中,需要使用 SSLContext 类来表示 SSL 上下文。您可以通过以下方式创建 SSL 上下文: ``` SSLContext sslContext = SSLContext.getInstance("TLS"); ``` 2. 创建 SSL 连接 使用 SSL 上下文,您可以创建一个 SSLSocketFactory 实例,该实例用于创建 SSL 连接。您可以通过以下方式创建 SSL 连接: ``` SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("example.com", 443); ``` 在上面的代码中,我们使用 `sslContext.getSocketFactory()` 方法获取 SSLSocketFactory 实例,然后使用该实例的 `createSocket()` 方法创建 SSL 连接。 3. 配置 SSL 连接 在创建 SSL 连接之后,需要对其进行配置。您可以通过以下方式配置 SSL 连接: ``` sslSocket.setEnabledProtocols(new String[] { "TLSv1.2" }); sslSocket.setEnabledCipherSuites(new String[] { "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" }); ``` 在上面的代码中,我们使用 `setEnabledProtocols()` 方法设置 SSL 连接所支持的协议版本,使用 `setEnabledCipherSuites()` 方法设置 SSL 连接所支持的密码套件。 4. 发送请求和接收响应 一旦 SSL 连接建立,您可以像普通的 HTTP 连接一样发送请求和接收响应。例如: ``` OutputStream outputStream = sslSocket.getOutputStream(); outputStream.write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n".getBytes()); InputStream inputStream = sslSocket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } ``` 在上面的代码中,我们首先获取 SSL 连接的输出流,然后向服务器发送 HTTP GET 请求。然后,我们获取 SSL 连接的输入流,并从中读取服务器的响应。 以上就是使用 Java 进行 HTTPS 通信的基本步骤。需要注意的是,为了确保通信的安全性,您需要确保服务器的 SSL 证书是有效的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值