簡體   English   中英

如何在Nginx和tomcat中使用受信任的證書?

[英]How to use trusted certificate with nginx and tomcat?

我正在將商人與我們的應用程序集成在一起。 商家向我們提供了JKS,KEY,PEM和P12文件以及證書密碼。

在開發服務器中,集成與JKS證書和使用HttpsURLConnection實現的證書密碼一起使用。

SSLContext sc = SSLContext.getInstance("TLSv1.2"); KeyManagerFactory kmf; KeyStore ks; char[] passphrase = keystore_password.toCharArray(); kmf = KeyManagerFactory.getInstance("SunX509"); ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream(keystore_path), passphrase); kmf.init(ks, passphrase); sc.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HostnameVerifier hv = new HostnameVerifier() {

  @Override public boolean verify(String urlHostName, SSLSession session) { if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) { logger.warn("Warning: URL host ' " + urlHostName + " ' is different to SSLSession host ' " + urlHostName + " '"); } return true; } }; 

在上層環境中,TOMCAT位於DMZ區域,僅通過nginx與外部世界進行交互。

tomcat請求nginx服務器的標頭中包含實際URL,nginx解析標頭並將請求轉發到URL,並將響應呈現給tomcat。

如何通過Nginx將帶有憑據的請求轉發給商家?

您不能“轉發”它。 要基於標頭的內容處理HTTP請求,nginx必須解密傳入的數據並重新加密傳出的修改后的數據。 由於像SSL / TLS這樣的安全協議的全部要點是,除授權端點外,其他任何人都無法看到或更改數據,因此nginx必須終止客戶端SSL / TLS會話本身並創建單獨的服務器端SSL / TLS會話在其上轉發HTTP級別的數據。

因此,要向“商戶”服務器進行身份驗證,必須使用客戶端證書(包括鏈證書)(如果適用)和匹配的私鑰對nginx進行配置,請參閱http://nginx.org/en/docs/http/ngx_http_proxy_module。 html#proxy_ssl_certificate等。

(如果還沒有,可以使用keytool -importkeystore將JKS轉換為PKCS12,使用openssl pkcs12將PKCS12轉換為PEM -在這里和其他堆棧(如超級用戶和serverfault)上都有大量現有的Q。)

從(實際)客戶端到nginx的會話是使用同一證書,其他證書進行身份驗證還是完全不使用證書進行身份驗證,取決於nginx的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM