http与https的区别及使用

一、http与https的区别

安全性:https是安全的超文本传输协议,使用了TLS/SSL加密(SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密)。

SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

是否需要申请证书:https需要使用ca申请证书。
传输协议:https具有安全性的SSL加密传输协议;http超文本传输协议,明文传输。
连接方式与端口:http的连接简单,是无状态的,端口是 80; https 在http的基础上使用了ssl协议进行加密传输,端口是 443。

二、http的工作过程

http由请求和响应构成,是一个标准的客户端服务器模型(C/S)。http协议是客户端发起请求,服务器响应请求。

http过程如下:

1.地址解析。域名系统DNS解析域名得到主机IP地址。

2.封装http请求数据包。封装主机IP地址以及主机信息。

3.封装成TCP包,建立TCP连接(三次握手)。

4.建立连接后,客户机向服务器发送请求。

5.服务器接收请求,给予响应。

6.服务器关闭TCP连接(四次挥手)。

7.客户端解析报文,解析并渲染HTML代码。

三、https的通信过程

https通信时,首先建立ssl层的连接,客户端将ssl版本号和加密组件发到服务器端。服务器端对收到的ssl版本号和加密组件进行匹配,同时将ca证书及密钥发送给客户端。

客户端对证书进行验证,验证通过后使用非对称加密对数据通信时的密钥进行协商。协商后得到一致的加密密钥,然后使用对称加密算法进行TCP连接,后续的过程跟http一致。三次握手,数据交换,四次挥手,通信结束。

https具体过程如下:

1.客户端和服务器端通过TCP建立连接。

2.客户端向服务器发送HTTPS请求。

3.服务器响应请求,并将数字证书发送给客户端,数字证书包括公共秘钥、域名、申请证书的公司。

4.客户端收到服务器端的数字证书之后,会验证数字证书的合法性。

5.如果公钥合格,那么客户端会生成一个用于进行对称加密的密钥client key,并用服务器的公钥对客户端密钥进行非对称加密。

非对称加密:客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以对外暴露,而私有密匙只有自己可见。

6.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

7.服务器接收到客户端发来的密文之后,会用私钥对其进行非对称解密,得到客户端秘钥。并使用客户端秘钥进行对称加密,生成密文并发送。

8.客户端收到密文,并使用客户端秘钥进行解密,渲染网页。

在这里插入图片描述
由于BPM系统需要调用PLM系统进行模具料号写入,这里需要调用https接口。
接口结构如下
在这里插入图片描述
项目中核心调用代码如下:
在代码层跳出SSL验证,防止出现SSL证书认证失败,可以参考我的这篇文章

if(errMsg.isEmpty()){
			DatApplication dat = datApplicationService.getDatApplicationByName("SystemMG");
			Map<String, Object> map = datDocumentService.getDocumentByField(dat.getAppId(), "SAPConfig", "SearchKey","PLM_B");
			//在代码层跳出SSL验证,防止出现SSL证书认证失败
			TrustManager[] trustAllCerts = {new TrustAllTrustManager()}; 
			SSLContext sc = SSLContext.getInstance("SSL");
			sc.getServerSessionContext().setSessionTimeout(0); 
			sc.init(null, trustAllCerts, null); 
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
			HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){
				@Override
				public boolean verify(String urlHostName, SSLSession session){
					return true;
				}
			});
			//调用https接口
			URL url = new URL("https://***.***.***/Windchill/servlet/RPC?CLASS=com.aac.integration");
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setRequestMethod("POST");
			conn.setRequestProperty("content-type", "text/xml");
			conn.setDoOutput(true);
			conn.setDoInput(true);
			String key = map.get("user")+":"+map.get("passwd");
			String passId = new String(Base64.getEncoder().encode(key.getBytes()));
			conn.setRequestProperty("Authorization", "Basic "+passId);
			conn.connect();
			OutputStream os = conn.getOutputStream();
			String s = "<soapenv:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:mes='http://***/***/***/message/'>"
					+"   <soapenv:Header/>"
					+"   <soapenv:Body>"
					+"      <mes:GetACreateMouldPart soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>"
					+"         <mouldNum xsi:type='xsd:string'>"+mouldNum+"</mouldNum>"
					+"         <partNum xsi:type='xsd:string'>"+partNum+"</partNum>"
					+"         <drawingType xsi:type='xsd:string'>"+drawingType+"</drawingType>"
					+"         <factories xsi:type='xsd:string'>"+factories+"</factories>"
					+"      </mes:GetACreateMouldPart>"
					+"   </soapenv:Body>"
					+"</soapenv:Envelope>";
			os.write(s.getBytes());
			os.flush();
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			IOUtils.copy(conn.getInputStream(),out);
			Document data = DocumentHelper.parseText(out.toString()); 
			Element rootElt = data.getRootElement();
			msg = rootElt.element("Body").element("GetACreateMouldPartResponse").elementTextTrim("return");
			os.close();
		}else{
			JSONObject json = new JSONObject();
			json.put("L_FLAG", "N");
			json.put("MESSAGE", errMsg.toString());
			msg = json.toString();
		}

参考文章:
https://blog.csdn.net/JAck_chen0309/article/details/105020259
https://blog.csdn.net/qq_35642036/article/details/82788421

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值