亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

tomcat配置https詳述(SSL)

2024-09-05 00:20:43
字體:
來源:轉載
供稿:網友

    一般的網頁傳輸都是基于http協議,在網絡中流通的信息都為明文,非常容易泄密。為保證網站信息不被中間服務器或者其它探測軟件捕獲,一般企業都使用 SSL對網頁內容加密,下面介紹tomcat中的SSL加密,詳細可參考鏈接:http://tomcat.apache.org/tomcat- 7.0-doc/ssl-howto.html

tomcat的加密根據自身的特色分兩種情況,一種為使用Java runtime(非APR),一種為OpenSSL library (through APR/Tomcat-Native). 這兩種的配置完全不同,下面分別介紹,讀者可以按自己應用的情況分別選擇。

一、Java runtime(非APR)情況
  1、產生client /server java key store

import java.io.FileOutputStream;import java.math.BigInteger;import java.security.InvalidKeyException;import java.security.KeyPair;import java.security.KeyStore;import java.security.NoSuchAlgorithmException;import java.security.NoSuchProviderException;import java.security.SecureRandom;import java.security.SignatureException;import java.security.cert.Certificate;import java.security.cert.CertificateEncodingException;import java.security.cert.X509Certificate;import java.util.Date;import javax.security.auth.x500.X500Principal;import javax.security.auth.x500.X500PrivateCredential;import org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator;import org.bouncycastle.x509.X509V3CertificateGenerator;/** *  * Tomcat HTTPS client/server key Certificate generator *  */public class TomcatKey { //Client Certificate static String TRUST_STORE_NAME = "client"; static char[] TRUST_STORE_PASSWORD = "test".toCharArray();  //Server Certificate  static String SERVER_NAME = "server"; static char[] SERVER_PASSWORD = "test".toCharArray(); static String SERVER_HOST = "localhost"; /**  * @param args  */ public static void main(String[] args) {  try {   // trustsotre, my root certificate   KeyStore store = KeyStore.getInstance("JKS");   // initialize   store.load(null, null);   KeyPair rootPair = generateKeyPair();   X500PrivateCredential rootCredential = createRootCredential(rootPair);   store.setCertificateEntry(TRUST_STORE_NAME, rootCredential     .getCertificate());   store.store(new FileOutputStream(TRUST_STORE_NAME + ".keystore"),     TRUST_STORE_PASSWORD);   // server credentials   store = KeyStore.getInstance("JKS");   store.load(null, null);   store.setKeyEntry(SERVER_NAME, rootCredential.getPrivateKey(),     SERVER_PASSWORD, new Certificate[] { rootCredential       .getCertificate() });   store.store(new FileOutputStream(SERVER_NAME + ".keystore"),     SERVER_PASSWORD);  } catch (NoSuchAlgorithmException e) {   e.printStackTrace();  } catch (NoSuchProviderException e) {   e.printStackTrace();  } catch (Exception e) {   e.printStackTrace();  } } //generate Key Pair public static KeyPair generateKeyPair() throws NoSuchAlgorithmException,   NoSuchProviderException {  // create the keys  java.security.KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");  generator.initialize(1024, new SecureRandom());  return generator.generateKeyPair(); } //generate certificate public static X500PrivateCredential createRootCredential(KeyPair rootPair) throws Exception {  X509Certificate rootCert = generateX509V3RootCertificate(rootPair);  return new X500PrivateCredential(rootCert, rootPair.getPrivate()); }  public static X509Certificate generateX509V3RootCertificate(KeyPair pair)throws NoSuchAlgorithmException,  NoSuchProviderException, CertificateEncodingException, InvalidKeyException, IllegalStateException, SignatureException {    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();    certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));    certGen.setIssuerDN(new X500Principal("CN=" + SERVER_HOST+ ", OU=GoldenSF, O=SHA, C=cn"));    certGen.setNotBefore(new Date(System.currentTimeMillis() - 5000L));    certGen.setSubjectDN(new X500Principal("CN=" + SERVER_HOST+ ", OU=GoldenSF, O=SHA, C=cn"));    certGen.setPublicKey(pair.getPublic());    certGen.setSignatureAlgorithm("SHA1WithRSA");    certGen.setNotAfter(new Date(System.currentTimeMillis() + Integer.MAX_VALUE));    return certGen.generate(pair.getPrivate(), new SecureRandom());   }}

2、將產生的文件:client.keystore, and server.keystore放到apache-tomcat-7/conf下面

  3、修改/conf/server.xml如下:

<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">    <!--<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  -->  <Listener className="org.apache.catalina.core.JasperListener" />  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  <GlobalNamingResources>    <Resource name="UserDatabase" auth="Container"              type="org.apache.catalina.UserDatabase"              description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"              pathname="conf/tomcat-users.xml" />  </GlobalNamingResources>  <Service name="Catalina">		<Connector port="443" SSLEnabled="true"                maxThreads="150" scheme="https" secure="true"                clientAuth="false" sslProtocol="TLS" 			                  keystoreFile="conf/server.keystore" keystorePass="test" 			  truststoreFile ="conf/client.keystore" truststorePass="test"/> 	<Connector port="8009" enableLookups="false" redirectPort="443" protocol="AJP/1.3" />    	    <Engine name="Catalina" defaultHost="localhost">          <Realm className="org.apache.catalina.realm.LockOutRealm">            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"               resourceName="UserDatabase"/>      </Realm>      <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                 prefix="localhost_access_log." suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>      </Host>    </Engine>  </Service></Server>

4、啟動tomcat, 如果 https://localhost/ 能正常打開,說明配置成功。

一些注意:
  1)如果不使用JAVA文件生成keystore,也可以通過JDK自帶的命令生成,
    如生成服務器端證書 keytool -genkey -keyalg RSA -dname "cn=localhost,ou=test,o=test,l=hongkong,st=hk,c=hk" -alias server -keypass asdfzxcv23 -keystore server.jks -storepass asdfzxcv23 -validity 3650 客戶端的CN可以是任意值,具體的可以參考相關文章
  2)在修改server.xml時,需要將tomcat的默認APR配置刪除
  <!--<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  -->
  3)如果之前有APR的配置,需要刪除文件bin/tcnative-1.dll
  4)注意JAVA文件生成的key和密碼一定要與配置中的一致,區分大小寫。


二、OPENSSL library (through APR/Tomcat-Native)情況
  1、首先需要到OPENSSL網站下載OpenSSL-Win32(或者Linux),安裝非常簡單
  2、利用OPENSSL生成公鑰
    D:/OpenSSL-Win32/bin>openssl
   genrsa -des3 -out key1.pem 2048

  enter pwd: test, to get a file : key1.pem

  3、繼續利用OPENSSL生成私鑰
   req -new -x509 -key key1.pem -out key1cert.pem -days 1095

   得到文件: key1cert.pem

  4、將這兩個文件放到apache-tomcat-7/conf目錄下,并修改server.xml為如下內容:

<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  <Listener className="org.apache.catalina.core.JasperListener" />  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  <GlobalNamingResources>    <Resource name="UserDatabase" auth="Container"              type="org.apache.catalina.UserDatabase"              description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"              pathname="conf/tomcat-users.xml" />  </GlobalNamingResources>    <Service name="Catalina">		<Connector port="443" maxHttpHeaderSize="8192"			maxThreads="150" minSpareThreads="25" 			enableLookups="false" disableUploadTimeout="true"			acceptCount="100" scheme="https" secure="true"			clientAuth="false" 			SSLEnabled="true"			protocol="org.apache.coyote.http11.Http11AprProtocol"			SSLCertificateFile="D:/apache-tomcat-7/conf/key1cert.pem"			SSLCertificateKeyFile="D:/apache-tomcat-7/conf/key1.pem"			SSLPassword="test"		/>					 		<Connector port="8009" enableLookups="false" redirectPort="443" protocol="AJP/1.3" />    	    <Engine name="Catalina" defaultHost="localhost">          <Realm className="org.apache.catalina.realm.LockOutRealm">            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"               resourceName="UserDatabase"/>      </Realm>      <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                 prefix="localhost_access_log." suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>      </Host>    </Engine>  </Service></Server>

  5、啟動tomcat ,https://localhost如果能正常打開,說明配置成功。

  幾點注意:
      1)、注意APR是否已經正常配置,
      2)、在啟動tomcat前需要確認任務管理器中沒有其它tomcat進程在執行(一般刪除所有javaw.exe即可),免得造成沖突,提示:java.lang.Exception: Socket bind failed;
      3)、密碼要一致,文件名不可寫混。

以上是我在tomcat環境下配置HTTPS的一點心得,歡迎大家指正。

http://zeallf.javaeye.com/blog/833250

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久免费少妇高潮久久精品99| 日韩在线视频观看正片免费网站| 久久97久久97精品免视看| 欧美视频中文字幕在线| 国产精品丝袜高跟| 亚洲欧美国产一本综合首页| 国产在线98福利播放视频| 亚洲人成网站在线播| www.欧美精品| 裸体女人亚洲精品一区| 欧美情侣性视频| 国产精品久久久久久亚洲影视| 91在线观看免费高清| 欧美日韩精品中文字幕| 成人在线免费观看视视频| 亚洲国产天堂久久综合| 中文字幕成人精品久久不卡| 国产成一区二区| 欧美xxxx18性欧美| 国产日韩专区在线| 91在线网站视频| 欧美风情在线观看| www.亚洲男人天堂| 91亚洲精品久久久| 日韩精品免费一线在线观看| 亚洲欧美国产另类| 色多多国产成人永久免费网站| 欧美成人精品在线观看| 国产一区二区三区欧美| 欧美巨乳在线观看| 亚洲欧美日韩直播| 国产成人综合久久| 精品无人国产偷自产在线| 国产精品成人免费视频| 日韩欧美在线观看视频| 欧美寡妇偷汉性猛交| 青青在线视频一区二区三区| 日韩最新av在线| 欧美中文在线视频| 久久久久久久久中文字幕| 69国产精品成人在线播放| 国产日韩精品在线| 久久影院中文字幕| 日韩精品视频在线免费观看| 亚洲一区二区三| 亚洲深夜福利网站| 中文字幕国产精品| 在线国产精品视频| 欧美性xxxx18| 成人精品久久一区二区三区| 精品亚洲一区二区三区在线播放| 国产91精品黑色丝袜高跟鞋| 狠狠久久亚洲欧美专区| 日韩中文在线中文网三级| 日韩av在线免播放器| 91免费人成网站在线观看18| 亚洲精品一区二三区不卡| 亚州成人av在线| 国产欧美日韩视频| 国产精品丝袜高跟| 欧美一区二粉嫩精品国产一线天| 久久99热精品| 日韩精品中文字幕在线播放| 国产在线观看精品| 日韩精品在线观看视频| 中文字幕日韩av电影| 亚洲xxx自由成熟| 亚洲综合在线小说| xxav国产精品美女主播| 69**夜色精品国产69乱| 国产精品大片wwwwww| 欧美性xxxxx极品娇小| 久久6精品影院| 欧美性高潮床叫视频| 国产精品久久久久久久天堂| 亚洲aⅴ男人的天堂在线观看| 欧美美女15p| 成人性生交大片免费看视频直播| 日韩大片在线观看视频| 亚洲国产精品va在线观看黑人| 精品动漫一区二区三区| 精品久久久久久久久久久久久| 欧美一级免费看| 秋霞av国产精品一区| 国产午夜精品美女视频明星a级| 日韩中文字幕第一页| 国产亚洲xxx| 精品国产乱码久久久久久虫虫漫画| 亚洲乱码一区av黑人高潮| 精品欧美一区二区三区| 精品久久久久久亚洲国产300| 久久精品电影一区二区| 亚洲视频自拍偷拍| 亚洲激情电影中文字幕| 欧美午夜精品在线| 亚洲综合小说区| 欧美精品18videos性欧美| 国产精品永久免费视频| 中文字幕亚洲一区二区三区五十路| 欧美日韩一区二区三区| 日韩中文字幕国产精品| 亚洲天堂影视av| 久久99青青精品免费观看| 亚洲欧美色婷婷| 在线亚洲男人天堂| 欧美日韩国产精品专区| 欧美综合在线第二页| 97超碰色婷婷| 懂色av一区二区三区| 77777亚洲午夜久久多人| 97在线视频免费| 日韩在线视频一区| 国产精品国产亚洲伊人久久| 国模极品一区二区三区| 亚洲激情在线视频| 欧美成人午夜激情在线| www.亚洲男人天堂| 亚洲视频在线观看网站| 久久国产精彩视频| 亚洲a级在线观看| 亚洲成人网在线观看| 免费成人高清视频| 国产精品高潮呻吟久久av黑人| 亚洲午夜久久久久久久| 九九精品在线播放| 久久久久一本一区二区青青蜜月| 国产精品私拍pans大尺度在线| 国产99久久久欧美黑人| 欧美成人黑人xx视频免费观看| 91免费综合在线| 深夜福利日韩在线看| 欧美性猛交xxxx乱大交极品| 中文字幕日韩在线视频| 国产精品久久久久久久久男| 国产精品一区久久| 福利精品视频在线| 4p变态网欧美系列| 国产精品一区二区三区免费视频| 亚洲精品美女在线| 欧美一级免费视频| 欧美在线视频一区二区| 日本国产高清不卡| 国产精品精品视频| 欧美大荫蒂xxx| 亚洲精品wwwww| 国产主播欧美精品| 97色在线视频| 欧美成人久久久| 一区二区三区在线播放欧美| 国产精品久久综合av爱欲tv| 日韩一区av在线| 欧美黄色三级网站| 午夜精品一区二区三区在线视| 欧美精品免费播放| 狠狠做深爱婷婷久久综合一区| 欧美精品videos另类日本| 亚洲自拍偷拍一区| 91av在线影院| 色综合久综合久久综合久鬼88| 91豆花精品一区| 成人欧美在线视频| 欧美有码在线观看视频| 欧美成人午夜免费视在线看片| 狠狠综合久久av一区二区小说|