国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java調(diào)用HTTPS接口,繞過SSL認(rèn)證

這篇具有很好參考價(jià)值的文章主要介紹了Java調(diào)用HTTPS接口,繞過SSL認(rèn)證。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一.Java調(diào)用HTTPS接口,繞過SSL認(rèn)證

Java調(diào)用HTTPS接口,繞過SSL認(rèn)證,筆記,https,ssl,網(wǎng)絡(luò)協(xié)議

1:說明

網(wǎng)絡(luò)編程中,HTTPS(Hypertext Transfer Protocol Secure)是一種通過加密的方式在計(jì)算機(jī)網(wǎng)絡(luò)上進(jìn)行安全通信的協(xié)議。網(wǎng)絡(luò)傳輸協(xié)議,跟http相比更安全,因?yàn)樗由狭薙SL/TLS協(xié)議來加密通信內(nèi)容。

Java調(diào)用HTTPS,需要與客戶端建立連接,但是建立連接的時(shí)候,需要進(jìn)行SSL認(rèn)證。有的時(shí)候?yàn)榱朔奖阏{(diào)用,我們會(huì)繞過SSL認(rèn)證。但是在特定環(huán)境中,繞過SSL認(rèn)證是十分不安全的,不推薦這么做。SSL認(rèn)證是確保通信安全的重要手段,繞過認(rèn)證的話可能帶來一系列的安全問題。

所以一般繞過SSL認(rèn)證不在生產(chǎn)環(huán)境中使用。

2:繞過SSL認(rèn)證

因?yàn)槲冶敬握{(diào)用HTTPS接口的目的是調(diào)用數(shù)據(jù),存儲(chǔ)在表中,不需要跨環(huán)境,只在本地執(zhí)行,所以進(jìn)行SSL認(rèn)證稍有繁瑣,所以我決定繞過SSL認(rèn)證。

通過自定義SSL上下文的方式,繞過SSL認(rèn)證的方式。通過自定義信任管理器,你可以在繞過證書驗(yàn)證的同時(shí),實(shí)現(xiàn)自己的證書驗(yàn)證邏輯。這對(duì)于使用自簽名證書或特定信任機(jī)制的情況很有用。

最后返回一個(gè)繞過SSL認(rèn)證的?HttpClient對(duì)象。

import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;


// 創(chuàng)建自定義的 SSL 上下文,用于繞過證書驗(yàn)證
	public static CloseableHttpClient createSSLClientDefault() {
		try {
			SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
				// 信任所有證書
				public boolean isTrusted(X509Certificate[] arg0, String arg1)
						throws CertificateException {
					return true;
				}
			}).build();
			// 創(chuàng)建主機(jī)名驗(yàn)證器,用于繞過主機(jī)名驗(yàn)證
			HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
			// 創(chuàng)建 SSL 連接套接字工廠,將自定義的 SSL 上下文和主機(jī)名驗(yàn)證器應(yīng)用于 HTTPS 連接
			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
			// 創(chuàng)建自定義的 CloseableHttpClient 實(shí)例,將 SSL 連接套接字工廠應(yīng)用于 HTTP 客戶端
			return HttpClients.custom().setSSLSocketFactory(sslsf).build();
		} catch (KeyManagementException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (KeyStoreException e) {
			e.printStackTrace();
		}
		return HttpClients.createDefault();
	}

該方法的實(shí)現(xiàn)邏輯如下:

  1. 創(chuàng)建一個(gè)自定義的 SSL 上下文(SSLContext),用于繞過 SSL 證書驗(yàn)證。
  2. 在 SSL 上下文中加載信任材料(TrustMaterial),并使用自定義的?TrustStrategy?來信任所有證書。
  3. 創(chuàng)建一個(gè)主機(jī)名驗(yàn)證器(HostnameVerifier),用于繞過主機(jī)名驗(yàn)證。使用NoopHostnameVerifier(主機(jī)名驗(yàn)證器)意味著在SSL連接中不會(huì)對(duì)服務(wù)器的主機(jī)名進(jìn)行驗(yàn)證。主機(jī)名驗(yàn)證器用于驗(yàn)證SSL證書中的主機(jī)名與服務(wù)器實(shí)際的主機(jī)名是否匹配。NoopHostnameVerifier是一個(gè)空實(shí)現(xiàn)的主機(jī)名驗(yàn)證器,它繞過了主機(jī)名驗(yàn)證,即使主機(jī)名不匹配,也會(huì)繼續(xù)進(jìn)行SSL連接。
  4. 創(chuàng)建一個(gè) SSL 連接套接字工廠(SSLConnectionSocketFactory),將自定義的 SSL 上下文和主機(jī)名驗(yàn)證器應(yīng)用于 HTTPS 連接。創(chuàng)建自定義的SSL連接。有四種實(shí)現(xiàn)方式(指定SSL/TLS協(xié)議版本、指定加密算法和密碼套件、自定義信任管理器、自定義主機(jī)名驗(yàn)證器),其中通過SSLConnectionSocketFactory指定自定義的主機(jī)名驗(yàn)證器(HostnameVerifier),以控制主機(jī)名驗(yàn)證的行為。
  5. 創(chuàng)建一個(gè)自定義的?CloseableHttpClient?實(shí)例,使用上述的 SSL 連接套接字工廠。
  6. 如果在創(chuàng)建 SSL 上下文時(shí)發(fā)生異常,將打印異常堆棧跟蹤信息。
  7. 如果在創(chuàng)建 SSL 上下文時(shí)發(fā)生異常或拋出的異常類型無法識(shí)別,將返回默認(rèn)的?CloseableHttpClient?實(shí)例。

3:調(diào)用HTTPS接口

private static final String SERVICE_URL = "https://ip:port/api/v1/cipher/json/create";
    private static final String AUTHORIZATION_HEADER = "savhsdkfas==";

    public ReturnT<String> execute(String param) throws Exception {

        //發(fā)送httpPost請(qǐng)求
        //創(chuàng)建HttpClient
        HttpClient httpclient = Myutils.createSSLClientDefault();
        //發(fā)送接口地址
        HttpPost httppost = new HttpPost(SERVICE_URL);
        //設(shè)置請(qǐng)求體格式Content-Type
        httppost.setHeader("Content-Type", "application/json");
        httppost.setHeader("Authorization", AUTHORIZATION_HEADER);

        //定義String請(qǐng)求Json參數(shù)體
        httppost.setEntity(new StringEntity(new String("{" +
                "\"keyCode\": \"" + keycode + "\"," +
                "\"algorithmParam\": \"SM4/ECB/PKCS7Padding\"," +
                "\"data\": {" +
                "\"SetlNewDTO\": \"" + this.convertDtoToBase64(accountPayDO) + "\"" +
                "}" +
                "}"), Charset.forName("UTF-8")));
        //發(fā)送請(qǐng)求并接收response
        HttpResponse httpresponse = httpclient.execute(httppost);
        String result = EntityUtils.toString(httpresponse.getEntity(), "UTF-8");

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode responseJson = objectMapper.readTree(result);
        // 從JSON對(duì)象中獲取鍵值對(duì),根據(jù)出參格式獲取出參數(shù)據(jù)
        JsonNode jsonNode = responseJson.get("data");
        JsonNode encData1 = jsonNode.get("encData");
        String encDate2 = encData1.toString();

    }

這段代碼是一個(gè)使用Apache HttpClient庫發(fā)送HTTP POST請(qǐng)求的示例。它發(fā)送一個(gè)帶有JSON參數(shù)的POST請(qǐng)求,并從響應(yīng)中提取特定的數(shù)據(jù)。

代碼中的execute方法聲明了拋出Exception異常,它接收一個(gè)String類型的參數(shù)param,但實(shí)際上沒有使用到該參數(shù)。

首先,代碼定義了服務(wù)的URL和授權(quán)頭信息。

然后,通過調(diào)用Myutils.createSSLClientDefault()方法創(chuàng)建一個(gè)自定義的SSL HttpClient對(duì)象。就是上邊繞過SSL對(duì)應(yīng)的方法

接下來,創(chuàng)建一個(gè)HttpPost對(duì)象,并設(shè)置請(qǐng)求的URL和請(qǐng)求頭信息。

然后,構(gòu)造請(qǐng)求體的JSON參數(shù),并設(shè)置到HttpPost對(duì)象中。

構(gòu)造請(qǐng)求體的使用需要使用json格式參數(shù),也可以直接使用?GJson json = new GJson(jsonStr);將非JSON數(shù)據(jù)轉(zhuǎn)化為JSON格式,JSON格式的S他臉紅,需要給每個(gè)參數(shù)加上引號(hào),并且使用\轉(zhuǎn)譯。所以setEntity的時(shí)候需要帶有JSON格式的字符串。

String jsonStr = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";

GJson json = new GJson(jsonStr);

接著,通過調(diào)用HttpClient的execute方法發(fā)送HttpPost請(qǐng)求,并接收HttpResponse響應(yīng)。

將響應(yīng)的實(shí)體內(nèi)容轉(zhuǎn)換為字符串,并存儲(chǔ)在result變量中。

使用Jackson庫的ObjectMapper類解析result字符串為JsonNode對(duì)象。

從JsonNode對(duì)象中獲取特定的數(shù)據(jù),例如從"data"鍵中獲取"encData"鍵的值。

最后,將獲取到的"encData"值存儲(chǔ)在encDate2變量中。

我的出參是這樣的,所以按照自己的格式替換數(shù)據(jù),便可以得到你想要的出參

{
	"code": "0",
	"message": "success",
	"data": {
		"encData": {
			"date": "wxpOGSdQD68Jp7fC4KV"
		}
	}
}

需要注意的是,代碼中的URL、授權(quán)頭信息、JSON參數(shù)等是示例數(shù)據(jù),你需要根據(jù)實(shí)際情況進(jìn)行修改和替換。

此代碼片段只是一個(gè)簡(jiǎn)單的示例,實(shí)際使用時(shí)應(yīng)該考慮異常處理、資源釋放等更完善的邏輯。

?最高級(jí)的自律,從一點(diǎn)點(diǎn)到億點(diǎn)點(diǎn)。

二.?Java直接調(diào)用HTTP接口,并且獲取List出參,輸出數(shù)據(jù)List

1.代碼實(shí)現(xiàn)?

public WrapperResponse<List<WarningDTO>> queryBigWarning(WarnInfoBInfoQueryDTO warnInfoBInfoQueryDTO) throws Exception {
    String SERVICE_URL = "http://127.0.0.1:8889/wakljfa";
        //發(fā)送httpPost請(qǐng)求
        //創(chuàng)建HttpClient
        HttpClient httpclient = HttpClients.createDefault();
        //發(fā)送接口地址
        HttpPost httppost = new HttpPost(SERVICE_URL);
        //定義String請(qǐng)求Json參數(shù)體
        httppost.setEntity(new StringEntity(new String("{" +
                "\"pageNum\": \"" + warnInfoBInfoQueryDTO.getPageNum() + "\"," +
                "\"pageSize\": \"" + warnInfoBInfoQueryDTO.getPageSize() + "\"," +
                "\"warnType\": \"" + warnInfoBInfoQueryDTO.getWarnType() + "\"" +
                "}"), Charset.forName("UTF-8")));

        httppost.setHeader("Content-Type", "application/json");
        //發(fā)送請(qǐng)求并接收response
        HttpResponse httpresponse = httpclient.execute(httppost);
        String result = EntityUtils.toString(httpresponse.getEntity(), "UTF-8");

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode responseJson = objectMapper.readTree(result);
        // 從JSON對(duì)象中獲取鍵值對(duì),根據(jù)出參格式獲取出參數(shù)據(jù)
        JsonNode data = responseJson.get("data");
        JsonNode listWarn = pageInfo.get("list");

        Iterator<JsonNode> iterator = listWarn.iterator();
        List<WarningDTO> warningDTOS = new ArrayList<>();
        while (iterator.hasNext()) {
            WarningDTO warningDTO = new WarningDTO();
            JsonNode warningNode =  iterator.next();
            String warnOcurTime= warningNode.get("warnOcurTime").asText();
            warningDTO.setWarnOcurTime(warnOcurTime);
            String warnId= warningNode.get("warnId").asText();
            warningDTO.setWarnId( warnId);
            String id= warningNode.get("id").asText();
            warningDTO.setId( Id);
            warningDTOS.add(warningDTO);
        }
        return WrapperResponse.success(warningDTOS);
}

2.出參模式

"data": {
			"list": [
				{
					"warnId": "000000000000000000000000000201",
					"warnOcurTime": 1672502400000,
					"id": "000000000000000000000000000201"
				},
				{
					"warnId": "000000000000000000000000000301",
					"warnOcurTime": 1672502400000,
	                "id": "000000000000000000000000000301"
				}
			]
}

(???? ) ?? ?看到這的朋友。如果可以的話。點(diǎn)點(diǎn)下邊的鏈接幫我投上兩票哦。????????????(???)

掘金2023年度人氣創(chuàng)作者打榜中,快來幫我打榜吧~ <https://activity.juejin.cn/rank/2023/writer/2606267657622381?utm_campaign=annual_2023&utm_medium=self_web_share&utm_source=Recently%E7%A5%9D%E7%A5%9D>

Java調(diào)用HTTPS接口,繞過SSL認(rèn)證,筆記,https,ssl,網(wǎng)絡(luò)協(xié)議文章來源地址http://www.zghlxwxcb.cn/news/detail-738308.html

到了這里,關(guān)于Java調(diào)用HTTPS接口,繞過SSL認(rèn)證的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【網(wǎng)絡(luò)安全】https與證書原理 | SSL Pinning及其繞過

    【網(wǎng)絡(luò)安全】https與證書原理 | SSL Pinning及其繞過

    參考: https://segmentfault.com/a/1190000009002353?sort=newest https://zhuanlan.zhihu.com/p/353571366 https://juejin.cn/post/6863295544828444686 HTTPS=HTTP+TLS,其它的協(xié)議也類似,如FTPS=FTP+TLS 1) ClientHello Client 首先發(fā)送本地的 TLS 版本、支持的加密算法套件,并且生成一個(gè)隨機(jī)數(shù) R1 。 2)Server Hello Server 端確

    2024年02月05日
    瀏覽(32)
  • 配置https---Nginx認(rèn)證ssl證書

    配置https---Nginx認(rèn)證ssl證書

    nginx作為前端的負(fù)載均衡服務(wù)器已經(jīng)很熟悉了,項(xiàng)目需要使用https安全的時(shí)候就需要認(rèn)證證書了 dockerweb管理工具 Portainer 如果對(duì)docker不那么熟悉可以使用docker 第三方管理端 然后訪問本地9000端口,登錄后可以管理容器鏡像 有了該工具可以直接進(jìn)入容器查看日志等操作 nginx環(huán)境安裝

    2024年01月19日
    瀏覽(25)
  • 基于tomcat的https(ssl)雙向認(rèn)證

    基于tomcat的https(ssl)雙向認(rèn)證

    ? ? ? ? 某個(gè)供應(yīng)商服務(wù)需要部署到海外,如果海外多個(gè)地區(qū)需要部署多個(gè)服務(wù),最好能實(shí)現(xiàn)統(tǒng)一登錄,這樣可以減輕用戶的使用負(fù)擔(dān)(不用記錄一堆密碼)。由于安全問題(可能會(huì)泄露用戶數(shù)據(jù)),海外服務(wù)不能直連公司sso服務(wù)端,因此需要其他的方案解決安全問題。最終

    2024年02月20日
    瀏覽(27)
  • Openfeign和okHttp的https請(qǐng)求忽略ssl證書認(rèn)證

    在通過feign和okhttp請(qǐng)求外部接口時(shí),出現(xiàn)了以下問題: Servlet.service() for servlet [dispatcherServlet] in context with path [/xxxx] threw exception [Request processing failed; nested exception is feign.RetryableException: java.security.cert.CertificateException: No subject alternative DNS name matching www.xx.xx.cn found. executing GET htt

    2024年02月07日
    瀏覽(21)
  • SpringBoot整合自簽名SSL證書,轉(zhuǎn)變HTTPS安全訪問(單向認(rèn)證服務(wù)端)

    SpringBoot整合自簽名SSL證書,轉(zhuǎn)變HTTPS安全訪問(單向認(rèn)證服務(wù)端)

    HTTP 具有相當(dāng)優(yōu)秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具兩面性,它也是有不足之處的。例如: 通信使用明文(不加密),內(nèi)容可能會(huì)被竊聽。 不驗(yàn)證通信方的身份,因此有可能會(huì)遭遇偽裝。 無法證明報(bào)文的完整性,所以有可能會(huì)遭篡改等。 因HTTP有存在通信

    2024年02月06日
    瀏覽(24)
  • springboot前后端分離項(xiàng)目配置https接口(ssl證書)

    springboot前后端分離項(xiàng)目配置https接口(ssl證書)

    本記錄操作方法vue.js項(xiàng)目使用nginx代理部署,后端springboot正常部署 前端使用443端口,后端使用8080端口 全部接口使用https vue.js配置axios相對(duì)路徑,好處:請(qǐng)求代理再nginx.conf中配置,無需重新修改代碼 request和response 攔截器根據(jù)具體項(xiàng)目要求進(jìn)行配置 在/usr/front/vue下創(chuàng)建Dockerf

    2024年02月03日
    瀏覽(23)
  • 解決dotnet調(diào)用https請(qǐng)求被中止未能創(chuàng)建SSL/TLS安全通道

    解決dotnet調(diào)用https請(qǐng)求被中止未能創(chuàng)建SSL/TLS安全通道

    環(huán)境:dotnet4.7.2/winserver2012 調(diào)用https出現(xiàn)請(qǐng)求被中止,未能創(chuàng)建SSL/TLS安全通道 自定義SetCertificatePolicy 函數(shù),在建立http連接之前調(diào)用 SetCertificatePolicy 函數(shù)。 請(qǐng)求被中止: 未能創(chuàng)建 SSL/TLS 安全通道 英文搜索 : the request was aborted could not create ssl/tls (net 4.6) statckoverflow 上面大多答

    2024年02月16日
    瀏覽(15)
  • Java安全——SSL和HTTPS

    Java安全——SSL和HTTPS

    SSL和HTTPS SSL提供了在TCP套接字之上的對(duì)數(shù)據(jù)進(jìn)行加密的方法,也是HTTPS協(xié)議的基礎(chǔ) 利用JSSE(java安全套接字?jǐn)U展包)可以像處理協(xié)議一樣創(chuàng)建和使用SSL套接字,從而支持HTTPS協(xié)議 SSL和tcp套接字之間的緊密關(guān)系,本身并不是一個(gè)加密引擎,但確是Internet上廣泛使用的加密技術(shù)。 SS

    2024年02月15日
    瀏覽(37)
  • Elastic stack8.10.4搭建、啟用安全認(rèn)證,啟用https,TLS,SSL 安全配置詳解

    Elastic stack8.10.4搭建、啟用安全認(rèn)證,啟用https,TLS,SSL 安全配置詳解

    ELK大家應(yīng)該很了解了,廢話不多說開始部署 kafka在其中作為消息隊(duì)列解耦和讓logstash高可用 kafka和zk 的安裝可以參考這篇文章 深入理解Kafka3.6.0的核心概念,搭建與使用-CSDN博客 需要 elasticsearch-8.10.4 logstash-8.10.4 kibana-8.10.4 kafka_2.13-3.6.0 apache-zookeeper-3.9.1-bin.tar filebeat-8.10.4-linux-

    2024年02月04日
    瀏覽(20)
  • QtWebApp開發(fā)https服務(wù)器,完成客戶端與服務(wù)器基于ssl的雙向認(rèn)證,純代碼操作

    引言:所謂http協(xié)議,本質(zhì)上也是基于TCP/IP上服務(wù)器與客戶端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn),web開發(fā)中常用的http server有apache和nginx。Qt程序作為http client可以使用QNetworkAccessManager很方便的進(jìn)行http相關(guān)的操作。 Qt本身并沒有http server相關(guān)的庫 ,也許是因?yàn)楹苌儆羞@種需求吧。但是實(shí)際開發(fā)中

    2024年02月14日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包