Tomcat使用HTTPS請求

筆者的https改造之路,在此寫下過程,以備筆者和讀者查閱。apache

本文接:搭建tomcat雲服務器tomcat

1、HTTPS簡單說明

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。安全

它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https: URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。服務器

2、HTTPS和HTTP的主要區別

一、https協議須要到ca申請證書,通常免費證書不多,須要交費。網絡

二、http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。app

三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。框架

四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。tcp

3、App Transport Security

iOS9中新增App Transport Security(簡稱ATS)特性, 主要使到原來請求的時候用到的HTTP,都轉向TLS1.2協議進行傳輸。這也意味着全部的HTTP協議都強制使用了HTTPS協議進行傳輸。阿里雲

通常咱們若是仍是使用的http,不更新的話,可經過在 Info.plist 中聲明,倒退回不安全的網絡請求。 輸入圖片說明加密

4、獲取證書

HTTPS改造的關鍵就是證書。網上不少關於HTTP改HTTPS方法所用的證書基本上都是使用的自簽證書,筆者剛開始也想用自籤解決這個問題,這種方法雖然是能夠解決HTTPS通訊的問題,但隨之又帶來了另外一個問題:使用自簽證書的話是否能經過蘋果的審覈呢?蘋果有官方信任的證書 iOS 9 中可用的受信任根證書列表 ,對於自簽證書的審覈可否經過暫不得知,因此筆者仍是建議能使用官方信任的證書上架。網上也有一些能夠免費申請的證書如startssl等,筆者的證書是上淘寶買的,反正不貴,一年也就三十幾塊錢,並且還省心。淘寶上購買ssl證書時,證書須要綁定域名(不能綁定IP),因此筆者又到阿里雲上購買了一個.cc的域名,一年十幾塊錢,而後將域名和服務器IP綁定起來,具體的購買和綁定方法網上搜搜有不少的,這裏再也不贅述。

5、tomcat服務器改造

拿到證書後,就能夠將證書安裝到服務器上了。筆者使用的是tomcat服務器,對於服務器的安裝配置,請查看筆者的博客:搭建tomcat雲服務器 ,對於tomcat的配置很簡單,下面一句話搞定,修改server.xml(apache-tomcat-7.0.73/conf/server.xml),取消下面這句話的註釋並配置本身證書的路徑和密碼就能夠了:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLSv1.2" keystoreFile="/home/jacedy/tomcat/apache-tomcat-7.0.73/你的證書名.jks" keystorePass="123456" />

因爲筆者使用的是CentOS 7系統,因此還需開放8443端口:

firewall-cmd --zone=public --add-port=8443/tcp --permanent

firewall-cmd --reload

6、iOS客戶端經過HTTPS方式訪問服務器

筆者iOS客戶端的通訊框架使用的是AFNetworking 3.1,須要將以前URL使用的IP地址換成域名就能夠了,另外還要將證書以cer的格式加入到工程中:

// https配置
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"cer"];
        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:certData, nil]];
        [securityPolicy setAllowInvalidCertificates:NO];
        NSSet *dataSet = [[NSSet alloc] initWithObjects:certData, nil];
        [securityPolicy setPinnedCertificates:dataSet];
        [securityPolicy setValidatesDomainName:YES];

好了,總算講完了,到此筆者已經成功將HTTP請求方式改爲了HTTPS。

若是喜歡請點贊!若是有疑問請留言^_^

相關文章
相關標籤/搜索