1. 程式人生 > >建立https連結的SLL驗證證書失效問題

建立https連結的SLL驗證證書失效問題

爬取網頁遇到的目標站點證書不合法問題。

使用jsoup爬取解析網頁時,出現瞭如下的異常情況。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1627)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:204)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:198)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:994)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:142)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:533)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:471)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:904)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1132)
        at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:643)

查明是無效的SSL證書問題。由於現在很多網站由http全站升級到https,可能是原站點SSL沒有部署好,導致證書無效,也有可能是其證書本身就不被認可。對於爬取其網頁就會出現證書驗證出錯的問題。 對於使用Jsoup自帶介面來下載網頁的,最新版本的1.9.2有validateTLSCertificates(boolean false)介面即可。
Jsoup.connect(url).timeout(30000).userAgent(UA).validateTLSCertificates(false).get()
java預設的證書集合裡面不存在對於多數自注冊的證書,對於不使用第三方庫來做http請求的話,我們可以手動 建立TrustManager 
來解決。確定要建立的連結的站點,否則不推薦這種方式
public static InputStream getByDisableCertValidation(String url) {
		TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
			public X509Certificate[] getAcceptedIssuers() {
				return new X509Certificate[0];
			}
			public void checkClientTrusted(X509Certificate[] certs, String authType) {
			}
			public void checkServerTrusted(X509Certificate[] certs, String authType) {
			}
		} };

		HostnameVerifier hv = new HostnameVerifier() {
			public boolean verify(String hostname, SSLSession session) {
				return true;
			}
		};

		try {
			SSLContext sc = SSLContext.getInstance("SSL");
			sc.init(null, trustAllCerts, new SecureRandom());
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
			HttpsURLConnection.setDefaultHostnameVerifier(hv);

			URL uRL = new URL(url);
			HttpsURLConnection urlConnection = (HttpsURLConnection) uRL.openConnection();
			InputStream is = urlConnection.getInputStream();
			return is;
		} catch (Exception e) {
		}
		return null;
	}


refer:

http://snowolf.iteye.com/blog/391931

http://stackoverflow.com/questions/1828775/how-to-handle-invalid-ssl-certificates-with-apache-httpclient

相關推薦

建立https連結SLL驗證證書失效問題

爬取網頁遇到的目標站點證書不合法問題。 使用jsoup爬取解析網頁時,出現瞭如下的異常情況。 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path

request發送HTTPS請求(處理SSL證書驗證)

瀏覽器 code erro 發送 傳輸層 查看 抓包 .com tcp連接 1、SSL是什麽,為什麽發送HTTPS請求時需要證書驗證? 1.1 SSL:安全套接字層。是為了解決HTTP協議是明文,避免傳輸的數據被竊取,篡改,劫持等。 1.2 TSL:Tran

golang實現https請求跳過證書驗證

請求 https 網站跳過證書驗證 在用 Golang 發起https請求時出現以下錯誤,因為證書是未經過認證的,而是自己建立的。 錯誤資訊:Get https://192.169.0.199:8080/Versty/app: x509: certificate signed by unkn

解決httpclient 4.5 https請求跳過證書驗證

public class SslUtil { public static CloseableHttpClient SslHttpClientBuild() { Registry<Con

阿里雲(CentOS+Apache) 獲取免費SSL證書並配置多個https連結

由於微信小程式需要使用https配置伺服器,剛好之前購買了3年的阿里雲ECS,故研究了一下,特此Mark下。首先,需要在阿里雲有個萬網的域名,之前做專案下了血本,買了好幾個,剛好還有庫存,不用再去備案一、阿里雲控制檯-》域名與網站(萬網)-》域名-》域名列表點選操作欄裡的SS

curl請求https禁止驗證證書(釘釘機器人php測試程式碼)

研究釘釘自定義機器人的php測試程式碼,一直返回false,查資料,發現curl請求https需要加上兩個引數(不驗證證書和hosts): curl_setopt($ch, CURLOPT_SSL

HttpClient不驗證證書通過代理模擬登陸HTTPS的例子

Java程式碼  package com;  public class HttpClientLoginProxy {  public static void main(String[] args) throws Exception{          CookieStore cookieStore = new

HttpClient執行https連結證書安全問題

/** * 獲取可信任https連結,以避免不受信任證書出現peer not authenticated異常 * * @param httpClient * @return */ public static DefaultHttpClient wrapCli

部署國密SSL證書建立HTTPS加密 “備胎”計劃

隨著中美貿易摩擦的出現,前有針對中興的“七年封禁”,後有針對華為的“斷供”制裁,我國眾多行業領域都需要思考一個問題:如果本行業的核

iOS 蘋果開發證書失效的解決方案(Failed to locate or generate matching signing assets)

attempted can app 根證書 原因 ... emp ati dev 從2月14日開始,上傳程序的同學可能會遇到提示上傳失敗的提示. 並且打開自己的鑰匙串,發現所有的證書全部都顯示此證書簽發者無效. 出現以下情況: Failed to locate or gen

C# https客戶端獲取證書的工具方法

cas cer flag data- 附加 1-1 plain start html 1. 導入證書到個人計算機中2. 獲取證書 [csharp] view plain copy print? private static X509Certificate2

https 調用驗證失敗 peer not authenticated

實現 不同 not org 失敗 下載 efault ltr net https 調用驗證失敗 peer not authenticated 報錯日誌: Caused by: javax.net.ssl.SSLPeerUnverifiedException: pe

https CA自簽名證書,並給Webserver頒發證書

extension there form nal 3.2 vim city append cor **CA主機執行命令** [root@centos7 ~]# cd /etc/pki/CA [root@centos7 CA]# touch index.txt [root@c

無法與伺服器建立安全連結

http://www.cocoachina.com/bbs/read.php?tid=1686383   nscurl --ats-diagnostics --verbose https://baidu.com驗證你的伺服器ATS是否PASS,如果沒有那服務端Nginx上配置TLSV1

棧的建立-----用連結串列實現棧

設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT  publi

ubuntu資料夾建立連結方法

原文連結:https://blog.csdn.net/jiuyueguang/article/details/9350859 1:預備知識   -s 是代號(symbolic)的意思。   這裡有兩點要注意:第一,ln命令會保持每一處連結檔案的同步性,也就是說,不論你改動了哪一處,其它的檔案

資料結構(連結串列系列):連結串列建立連結串列刪除特定節點,連結串列氣泡排序,連結串列快速排序

一、連結串列的理解: 1,各個節點間地址存放可以不連續,雖說是表,但是指標存在是為了找到其他的節點,如果連續了,都沒必要用連結串列了。 2,各節點依賴上一節點,要找到某一個節點必須找到他的上一個節點,所以要訪問連結串列,必須要知道頭指標,然後從頭指標訪問開始。 3,各節點間原來是獨立的,本

Android使用Glide載入https連結的圖片不顯示的原因

平時我們使用Glide載入http網址的圖片的時候,圖片可以正常加載出來,但是如果伺服器端加上了安全認證,當載入自簽名的https圖片的時候就會報如下錯誤(證書路徑驗證異常)。  我們如果不修改Glide的程式碼的話,是會出現 javax.net.ssl.SSLHandshakeExceptio

ubuntu14.04配置apache https訪問(ssl證書來源阿里雲)

ubuntu14.04配置apache https訪問(ssl證書來源阿里雲) 針對ubuntu14.04 版本的配置,其他版本資料夾位置不一樣只能當做參考 首先去阿里雲上申請證書,成功後下載到一個apache版本證書 遠端連線linux桌面 cd /etc/apach

uboot的主Makefile中變數MKCONFIG中建立符號連結相關問題

在uboot的主Makefile中,定義了一個變數:MKCONFIG    := $(SRCTREE)/mkconfig。 該MKCONFIG 變數即為源程式目錄下的mkconfig指令碼檔案,該檔案在uboot的前期配置操作時會用到。 x210_sd_conf