記錄一次線上Https請求報錯的問題

進入正題:

????????我們系統(tǒng)依賴一個外部查詢接口,是HTTPS提供服務的,由于外部系統(tǒng)沒有測試環(huán)境,所以我們都是直接請求的他們生產(chǎn)環(huán)境。項目里面我們使用的HttpClient,其創(chuàng)建SSLClient的代碼如下:

 private static CloseableHttpClient createSSLClientDefault() {
        SSLContext sslContext;
        try {
            sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                //信任所有
                @Override
                public boolean isTrusted(X509Certificate[] xcs, String string) {
                    return true;
                }
            }).build();

            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);
        }
        return HttpClients.createDefault();
    }

這樣就可以正常的調用HTTPS服務了。但是當我們的服務部署到線上環(huán)境以后,由于生產(chǎn)機器找不到外部接口的域名,所以配置了host,指向該外部接口所在的Nginx服務器,但是請求一直報錯:doesn't match any of the subject alternative names: []肥荔。用curl -k調用該接口,報(35) SSL connect error錯誤,當初還一度懷疑linux機器openssl版本問題,所以強制升級了一個版本還是沒有解決粟矿。后面知道curl有個-v的參數(shù),錯誤信息如下:

* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -5990
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

所以按照網(wǎng)上的流程升級了一下nss版本,最終curl -k可以調通服務了撩轰。但是通過httpclient還是報錯,所以可以排除掉openssl的問題。所以只能分析下測試環(huán)境和生產(chǎn)環(huán)境的差異,看問題到底出現(xiàn)在什么地方迹辐。
????????后面通過咨詢外部接口的同事,了解到他們的外部接口服務接入了公司內部的智能網(wǎng)關,在智能網(wǎng)關配置了統(tǒng)一的HTTPS證書。而且只要接入了智能網(wǎng)關的服務,請求都會先經(jīng)過智能網(wǎng)關,然后轉發(fā)到他們自己的服務器甚侣。但是生產(chǎn)環(huán)境和智能網(wǎng)關不在同一網(wǎng)絡,而且解析不到外部接口的域名,只能通過host映射到他們的Nginx服務器上明吩。看一下測試環(huán)境請求外部接口的網(wǎng)絡拓撲:


測試環(huán)境請求網(wǎng)絡拓撲

生產(chǎn)環(huán)境的請求網(wǎng)絡拓撲:


生產(chǎn)環(huán)境請求網(wǎng)絡拓撲

????????總算有點眉目了,測試環(huán)境能調通主要是能在內部DNS服務器解析到對應域名殷费。而生產(chǎn)環(huán)境是通過host來做的映射,當去解析域名的時候發(fā)現(xiàn)當前網(wǎng)絡沒有該域名,所以報錯doesn't match any of the subject alternative names: []印荔。當時有兩種思路,第一種:能不能在生產(chǎn)環(huán)境開啟訪問智能網(wǎng)關的權限,然后直接走域名,但是公司不知道基于什么考慮,不允許這樣做。第二種:http client是否支持不解析域名的操作,確實http client可以設置不解析host的策略,將其創(chuàng)建SSLClient的代碼調整為如下代碼:

private static CloseableHttpClient createSSLClientDefault() {
        try {
            SSLContextBuilder builder = new SSLContextBuilder();
            builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
            //不進行主機名驗證
            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(builder.build(),
                    NoopHostnameVerifier.INSTANCE);
            Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register("http", new PlainConnectionSocketFactory())
                    .register("https", sslConnectionSocketFactory)
                    .build();

            PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
            cm.setMaxTotal(100);
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslConnectionSocketFactory)
                    .setDefaultCookieStore(new BasicCookieStore())
                    .setConnectionManager(cm).build();
            return httpclient;
        } catch (Exception e) {
            logger.error("createSSLClientDefault error", e);
        }
        return null;
    }

即可解決問題详羡。一個https的小問題確實耗費了我不少的時間,所以有必要記錄一下仍律。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市实柠,隨后出現(xiàn)的幾起案子染苛,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茶行,死亡現(xiàn)場離奇詭異躯概,居然都是意外死亡,警方通過查閱死者的電腦和手機畔师,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門娶靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人看锉,你說我怎么就攤上這事姿锭。” “怎么了伯铣?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵呻此,是天一觀的道長。 經(jīng)常有香客問我腔寡,道長焚鲜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任放前,我火速辦了婚禮忿磅,結果婚禮上,老公的妹妹穿的比我還像新娘凭语。我一直安慰自己葱她,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布似扔。 她就那樣靜靜地躺著吨些,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炒辉。 梳的紋絲不亂的頭發(fā)上豪墅,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音辆脸,去河邊找鬼但校。 笑死螃诅,一個胖子當著我的面吹牛啡氢,可吹牛的內容都是我干的。 我是一名探鬼主播术裸,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼倘是,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了袭艺?” 一聲冷哼從身側響起搀崭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘤睹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體升敲,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年轰传,在試婚紗的時候發(fā)現(xiàn)自己被綠了驴党。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡获茬,死狀恐怖港庄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情恕曲,我是刑警寧澤鹏氧,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站佩谣,受9級特大地震影響把还,放射性物質發(fā)生泄漏。R本人自食惡果不足惜稿存,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一笨篷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓣履,春花似錦率翅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至燕锥,卻和暖如春辜贵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归形。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工托慨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暇榴。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓厚棵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔼紧。 傳聞我的和親對象是個殘疾皇子婆硬,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355