應(yīng)蘋(píng)果APP Store 要求(蘋(píng)果要求所有iOS應(yīng)用必須使用ATS(App Transport Security)峰档,不少項(xiàng)目已啟用HTTPS協(xié)議禁添,當(dāng)然網(wǎng)上已有很多列子撮胧,但多數(shù)都是講解自定義簽名證書(shū)
一般來(lái)說(shuō),主流的Web服務(wù)軟件老翘,通常都基于兩種基礎(chǔ)密碼庫(kù):OpenSSL和Java芹啥。
Tomcat锻离、Weblogic、JBoss等墓怀,使用Java提供的密碼庫(kù)汽纠。通過(guò)Java的Keytool工具,生成Java Keystore(JKS)格式的證書(shū)文件傀履。
Apache虱朵、Nginx等,使用OpenSSL提供的密碼庫(kù)钓账,生成PEM碴犬、KEY、CRT等格式的證書(shū)文件官扣。
Tomcat翅敌、Jetty服務(wù)器
如果是自定義簽名證書(shū),直接Java JDK keytool生成簽名文件keystore或jks文件
找到安裝Tomcat目錄下該文件server.xml,一般默認(rèn)路徑都是在 conf 文件夾中惕蹄。找到 <Connection port="8443" 標(biāo)簽蚯涮,增加如下屬性:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="server.keystore"
keystorePass="證書(shū)密碼"
clientAuth="false"/>
如果是CA分發(fā)證書(shū),需要下載證書(shū)(一般包含pem和key文件)卖陵,若下載文件里面有pfx文件遭顶,可以直接使用它作為簽名文件
若沒(méi)有需要自己去制作一個(gè)pfx文件或jks文件,命令如下:
openssl pkcs12 -export -out 213981318100861.pfx -inkey 213981318100861.key -in 213981318100861.pem
Tomcat配置如下:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/213981318100861.pfx"
keystoreType="PKCS12"
keystorePass="證書(shū)密碼"
clientAuth="false"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>
####### JKS證書(shū)安裝
( 1 ) 使用java jdk將PFX格式證書(shū)轉(zhuǎn)換為JKS格式證書(shū)(windows環(huán)境注意在%JAVA_HOME%/jdk/bin目錄下執(zhí)行)
keytool -importkeystore -srckeystore 213981318100861.pfx -destkeystore your-name.jks -srcstoretype PKCS12 -deststoretype JKS
回車(chē)后輸入JKS證書(shū)密碼和PFX證書(shū)密碼泪蔫,強(qiáng)烈推薦將JKS密碼與PFX證書(shū)密碼相同棒旗,否則可能會(huì)導(dǎo)致Tomcat啟動(dòng)失敗。
( 2 ) 找到安裝 Tomcat 目錄下該文件Server.xml撩荣,一般默認(rèn)路徑都是在 conf 文件夾中铣揉。找到 <Connection port="8443" 標(biāo)簽,增加如下屬性:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/your-name.jks"
keystorePass="證書(shū)密碼"
clientAuth="false"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>
( 注意:不要直接拷貝所有配置餐曹,只需添加 keystoreFile,keystorePass等參數(shù)即可逛拱,其它參數(shù)請(qǐng)根據(jù)自己的實(shí)際情況修改 )
OK,搞定台猴,重啟Tomcat
Jetty配置
簽名生成也和以上一樣朽合,就不說(shuō)了
pom文件添加以下配置:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<webAppSourceDirectory>${project.basedir}/src/main/webapp</webAppSourceDirectory>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>10092</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
<connector implementation="org.mortbay.jetty.security.SslSocketConnector">
<port>10093</port>
<maxIdleTime>60000</maxIdleTime>
<keystore>cert/your-name.jks</keystore>
<password>證書(shū)密碼</password>
<keyPassword>證書(shū)密碼</keyPassword>
</connector>
</connectors>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
<scanIntervalSeconds>2</scanIntervalSeconds>
</configuration>
</plugin>
檢測(cè)HTTPS是否完全符合ATS的要求,命令如下:
nscurl --ats-diagnostics --verbose 網(wǎng)址
如果HTTPS服務(wù)器能通過(guò)ATS特性饱狂,則上面所有測(cè)試案例都是PASS曹步;如果某一項(xiàng)的Reuslt是FAIL,就找到ATS Dictionary來(lái)查看休讳,就能知道HTTPS服務(wù)器不滿(mǎn)足ATS哪個(gè)條件讲婚。