https 證書 相關(guān)知識(shí)匯總

x509
符合PKI ITU-T X509標(biāo)準(zhǔn)德谅,基本的證書格式,只包含公鑰萨螺。x509證書由用戶公共密鑰和用戶標(biāo)識(shí)符組成。此外還包括版本號(hào)愧驱、證書序列號(hào)慰技、CA標(biāo)識(shí)符、簽名算法標(biāo)識(shí)组砚、簽發(fā)者名稱吻商、證書有效期等信息。

SSL加密是Netscape公司所提出的安全保bai密協(xié)議糟红,在瀏覽器和duWeb服務(wù)器之間構(gòu)造安zhi全通道來進(jìn)行數(shù)據(jù)傳輸艾帐,SSL運(yùn)行在TCP/IP層之上、應(yīng)dao用層之下盆偿,為應(yīng)用程序提供加密數(shù)據(jù)通道柒爸,它采用了RC4、MD5以及RSA等加密算法事扭,使用40 位的密鑰捎稚,適用于商業(yè)信息的加密。


相關(guān)圖

TLS是安全傳輸層協(xié)議求橄。安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性今野。該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS 握手協(xié)議(TLS Handshake)。較低的層為 TLS 記錄協(xié)議罐农,位于某個(gè)可靠的傳輸協(xié)議上面条霜。

SSL加密并不保護(hù)數(shù)據(jù)中心本身,而是確保了SSL加密設(shè)備的數(shù)據(jù)中心安全涵亏,可以監(jiān)控企業(yè)中來往于數(shù)據(jù)中心的最終用戶流量宰睡。
從某個(gè)角度來看,數(shù)據(jù)中心管理員可以放心將加密裝置放在某個(gè)地方溯乒,需要使用時(shí)再進(jìn)行應(yīng)用夹厌,數(shù)據(jù)中心應(yīng)該會(huì)有更合理的方法來應(yīng)對(duì)利用SSL的惡意攻擊,需要找到SSL加密應(yīng)用的最佳實(shí)踐裆悄。
TLS協(xié)議是可選的汇恤,必須配置客戶端和服務(wù)器才能使用。主要有兩種方式實(shí)現(xiàn)這一目標(biāo):一個(gè)是使用統(tǒng)一的TLS協(xié)議通信端口(例如:用于HTTPS的端口443)事镣。另一個(gè)是客戶端請(qǐng)求服務(wù)器連接到TLS時(shí)使用特定的協(xié)議機(jī)制(例如:郵件、新聞協(xié)議和STARTTLS)孩等。
一旦客戶端和服務(wù)器都同意使用TLS協(xié)議,他們通過使用一個(gè)握手過程協(xié)商出一個(gè)有狀態(tài)的連接以傳輸數(shù)據(jù)采够。通過握手肄方,客戶端和服務(wù)器協(xié)商各種參數(shù)用于創(chuàng)建安全連接。

    
SSLContext sslContext =SSLContext.getInstance("TLS");
主要注釋:
This method traverses the list of registered security Providers,
    starting with the most preferred Provider.
      A new SSLContext object encapsulating the
      SSLContextSpi implementation from the first
      Provider that supports the specified protocol is returned.
 此方法遍歷已注冊(cè)安全提供者的列表蹬癌,從最喜歡的提供者開始权她。返回一個(gè)新的SSLContext對(duì)象,該對(duì)象封裝了支持指定協(xié)議的第一個(gè)提供程序的SSLContextSpi實(shí)現(xiàn)逝薪。    
   
 sslContext.init(null, null, null);
主要注釋:
  Initializes this context. Either of the first two parameters
  may be null in which case the installed security providers will
  be searched for the highest priority implementation of the
  appropriate factory. Likewise, the secure random parameter may
  be null in which case the default implementation will be used.
  <P>
 Only the first instance of a particular key and/or trust manager
 implementation type in the array is used.  (For example, only
  the first javax.net.ssl.X509KeyManager in the array will be used.)
初始化此上下文隅要。前兩個(gè)參數(shù)中的任何一個(gè)都可以為null,在這種情況下董济,將搜索*已安裝的安全提供程序以尋找適當(dāng)工廠的最高優(yōu)先級(jí)實(shí)現(xiàn)步清。同樣,安全隨機(jī)參數(shù)可以為null虏肾,在這種情況下廓啊,將使用默認(rèn)實(shí)現(xiàn)。
 <P> 僅使用數(shù)組中特定密鑰和/或信任管理器*實(shí)現(xiàn)類型的第一個(gè)實(shí)例封豪。 (例如谴轮,僅使用數(shù)組中的第一個(gè)javax.net.ssl.X509KeyManager。)


 SSLSocketFactory socketFactory = new Tls12SocketFactory(sslContext.getSocketFactory());
做了個(gè)代理
public class Tls12SocketFactory extends SSLSocketFactory {
    private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"};
    final SSLSocketFactory delegate;

    public Tls12SocketFactory(SSLSocketFactory delegate) {
        this.delegate = delegate;
    }
...
}


 /**
     * Sets the protocol versions enabled for use on this connection.
     * <P>
     * The protocols must have been listed by
     * <code>getSupportedProtocols()</code> as being supported.
     * Following a successful call to this method, only protocols listed
     * in the <code>protocols</code> parameter are enabled for use.
     *
     * @param protocols Names of all the protocols to enable.
     * @throws IllegalArgumentException when one or more of
     *            the protocols named by the parameter is not supported or
     *            when the protocols parameter is null.
     * @see #getEnabledProtocols()
     */
翻譯:
設(shè)置啟用用于此連接的協(xié)議版本撑毛。 * <P> *必須由* <code> getSupportedProtocols()</ code>列出該協(xié)議受支持书聚。 *成功調(diào)用此方法后,僅允許使用<code> protocols </ code>參數(shù)中列出的協(xié)議藻雌。

    public abstract void setEnabledProtocols(String protocols[]);
使用:
 private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"};
private Socket patch(Socket s) {
        if (s instanceof SSLSocket) {
            ((SSLSocket) s).setEnabledProtocols(TLS_SUPPORT_VERSION);
        }
        return s;
    }
eg: 在 createSocket 中調(diào)用
 @Override
    public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
        return patch(delegate.createSocket(host, port, localHost, localPort));
    }



public static class UnSafeTrustManager implements X509TrustManager
    {
      返回受信任的X509證書數(shù)組雌续。
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

        }
該方法檢查服務(wù)器的證書,若不信任該證書同樣拋出異常胯杭。通過自己實(shí)現(xiàn)該方法驯杜,可以使之信任我們指定的任何證書。
//          在實(shí)現(xiàn)該方法時(shí)做个,也可以簡(jiǎn)單的不做任何處理鸽心,即一個(gè)空的函數(shù)體,由于不會(huì)拋出異常居暖,它就會(huì)信任任何證書顽频。
            
        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

        }
    該方法檢查客戶端的證書,若不信任該證書則拋出異常太闺。由于我們不需要對(duì)客戶端進(jìn)行認(rèn)證糯景,
//          因此我們只需要執(zhí)行默認(rèn)的信任管理器的這個(gè)方法。JSSE中,默認(rèn)的信任管理器類為TrustManager蟀淮。
            
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

//設(shè)置HTTPS 證書
 OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .readTimeout(BuildConfig.INTERNET_REQUEST_TIME, TimeUnit.MILLISECONDS)
                .connectTimeout(BuildConfig.INTERNET_REQUEST_TIME, TimeUnit.MILLISECONDS)
                .addInterceptor(headerInterceptor)
                .addInterceptor(logging)
                .sslSocketFactory(socketFactory, new UnSafeTrustManager())
                .build();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末最住,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子怠惶,更是在濱河造成了極大的恐慌涨缚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策治,死亡現(xiàn)場(chǎng)離奇詭異脓魏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)通惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門轧拄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讽膏,你說我怎么就攤上這事≈舴幔” “怎么了府树?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)料按。 經(jīng)常有香客問我奄侠,道長(zhǎng),這世上最難降的妖魔是什么载矿? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任垄潮,我火速辦了婚禮,結(jié)果婚禮上闷盔,老公的妹妹穿的比我還像新娘弯洗。我一直安慰自己,他們只是感情好逢勾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布牡整。 她就那樣靜靜地躺著,像睡著了一般溺拱。 火紅的嫁衣襯著肌膚如雪逃贝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天迫摔,我揣著相機(jī)與錄音沐扳,去河邊找鬼。 笑死句占,一個(gè)胖子當(dāng)著我的面吹牛沪摄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卓起,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼和敬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戏阅,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤昼弟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奕筐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舱痘,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年离赫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芭逝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渊胸,死狀恐怖旬盯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翎猛,我是刑警寧澤胖翰,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站切厘,受9級(jí)特大地震影響萨咳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疫稿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一培他、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遗座,春花似錦舀凛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碎绎,卻和暖如春螃壤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筋帖。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工奸晴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人日麸。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓寄啼,卻偏偏與公主長(zhǎng)得像逮光,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子墩划,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354