簡體   English   中英

如何在Ubuntu 14上使用SSL配置tomcat 7 - 未解答的問題

[英]How to configure tomcat 7 with SSL on Ubuntu 14 - the unanswered questions

有數百個在tomcat上安裝SSL的指南,但我找不到這些關鍵問題。

有兩種方法可以安裝SSL:一種是我們的keytool,另一種是簡單地將證書文件放在FS上,並將server.xml指向這些文件(不使用keytool)。

如果有人知道答案,我將非常感激這些問題:

  1. 使用更復雜的keytool是否有任何優勢,而不僅僅是將證書放在FS上,例如在/ etc / ssl中
  2. 如果使用keytool,則必須提供“-keystore xxx.jks”。 xxx.jks應該放在哪里,例如/ root,/ home / tomcat7,/ etc / var / lib / tomcat7? 我只能找到一個說明如何設置密鑰庫的指南,它說把它放在tomcat目錄中,這似乎很瘋狂,因為當我們升級tomcat時,我們失去了證書,但如果這是一個很難的要求那么我們就可以做到。
  3. 如果使用keytool,哪個用戶應該使用該工具導入cert,tomcat7或root?
  4. 它們可用的示例顯示如何將證書導入到用於生成原始csr的密鑰庫中。 我們沒有使用它來生成csr(我們從第三方獲得了證書)。 這是否意味着我們無法使用密鑰庫,或者需要先生成虛擬csr?

我們不知道哪個CA用於頒發證書,因此無法查找答案。 我們有3個文件:gd_bundle-g2-g1.crt,our.crt和our.key

我們使用java 7。

-----更新1 ------

收到建議后我們不能將keytool用於我們現有的密鑰/ crt文件(我們認為是由go daddy發布),我們嘗試了將密鑰/證書直接放入server.xml的舊方法,它當然適用於舊版本tomcat:

我們收到此錯誤:

 java.io.FileNotFoundException: /usr/share/tomcat7/.keystore (No such file or directory)

----更新2 -----

我們發現這篇文章展示了如何使用tomcat的現有證書:

openssl pkcs12 -export -in mycert.crt -inkey mykey.key -out our.p12 -name tomcat -CAfile myCA.crt -caname root -chain

然后編輯server.xml:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           keystoreType="PKCS12"
           keystoreFile="/etc/ssl/our.p12" keystorePass=""
           clientAuth="false" sslProtocol="TLS" />

但是,這會在catalina.out中顯示此消息:

 SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-443"]
 java.net.SocketException: No such file or directory

-----更新3 -----

因此我們不知道為什么433失敗(端口80工作,443上沒有別的,我們以root身份啟動它),但是如果我們將其更改為8443,則tomcat啟動時沒有錯誤(horay!),但是我們導航到www.oursite.com/ourwebapp:8443我們得到404.如果我們嘗試https://www.oursite.com/ourwebapp:8443,我們會從Chrome獲得“此網頁不可用”。

netstat -a

顯示它正在偵聽端口8443(和80,但443上沒有任何內容)

有任何想法嗎?

要解決catalina.out中報告的上述問題的這一部分......

嚴重:無法初始化與ProtocolHandler相關的終點[“http-bio-443”] java.net.SocketException:沒有這樣的文件或目錄

對我來說,這是由於tomcat不允許綁定到端口443引起的,並且與密鑰庫/證書無關。

我通過運行來修復它...

sudo touch /etc/authbind/byport/443 
sudo chmod 500 /etc/authbind/byport/443 
sudo chown tomcat7 /etc/authbind/byport/443

如果您沒有安裝authbind,請通過它安裝

apt-get install authbind

有數百個在tomcat上安裝SSL的指南,但我找不到這些關鍵問題。

你唯一需要的就是Tomcat附帶的那個。

有兩種方法可以安裝SSL:一種是我們的keytool,另一種是簡單地將證書文件放在FS上,並將server.xml指向這些文件(不使用keytool)。

不真實的。 在這兩種情況下,您都必須生成密鑰對和CSR。 Tomcat文檔展示了如何使用openssl和Java keytool. 你不能只從一個地方開始使用證書文件。

使用更復雜的keytool是否有任何優勢,而不僅僅是將證書放在FS上,例如在/ etc / ssl中

稻草人爭論。 密鑰工具比恕我直言,復雜的相當 openssl

如果使用keytool,則必須提供“-keystore xxx.jks”。 xxx.jks應該放在哪里,例如/ root,/ home / tomcat7,/ etc / var / lib / tomcat7?

隨時隨地。 Tomcat提供的手段, 讓你告訴Tomcat的 ,其中密鑰庫。

我只能找到一個說明如何設置密鑰庫的指南,它說把它放在tomcat目錄中,這似乎很瘋狂,因為當我們升級tomcat時,我們失去了證書,但如果這是一個很難的要求那么我們就可以做到。

討論未說明的任意互聯網垃圾說什么是沒有意義的。 按照Tomcat文檔。

如果使用keytool,哪個用戶應該使用該工具導入cert,tomcat7或root?

只要用戶具有對密鑰庫的寫訪問權,就沒有關系。

它們可用的示例顯示如何將證書導入到用於生成原始csr的密鑰庫中。 我們沒有使用它來生成csr(我們從第三方獲得了證書)。

在那種情況下,你甚至無法開始。 您的第一步是生成密鑰對。 沒有其他人能為你做到這一點。 這對夫婦的私人成員是私人的。 如果其他人提供了它,它不是私有的,因此它不可能實現它的目的。

這是否意味着我們無法使用密鑰庫,或者需要先生成虛擬csr?

您需要生成一個真正的密鑰對,一個真正的 CSR,將其簽名,並將其導入密鑰庫,在所有三種情況下使用相同的別名。

我們不知道哪個CA用於頒發證書,因此無法查找答案。 我們有3個文件:gd_bundle-g2-g1.crt,our.crt和our.key

扔掉它們然后重新開始。 您一直關注或給出的過程完全無效且從始至終都不安全。 如果給你一個.key文件,它就完全沒用了,無論誰給你,他們都不知道他們在說什么,應該從這個循環中取出。 被解雇。

讓我們從清除一些事情開始。

首先,X.509證書是X.509證書,無論它們是捆綁在Java密鑰庫,PKCS12密鑰庫中,還是在基於OpenSSL的軟件通常使用的單獨PEM文件中。 您可以在所有這些之間來回轉換。

其次,Tomcat有兩種不同類型的連接器:基於JSSE的連接器(目前都需要使用Java或PKCS12密鑰庫)和基於APR的本機連接器,它需要在磁盤上使用PEM編碼的文件,如Apache httpd確實如此。

與基於JSSE的連接器相比,有一個重要原因需要基於本機APR的連接器:性能。 而且我不只是談論幾個百分點。 最近的基准測試表明, OpenSSL的性能比JSSE 一個數量級

如果您希望使用基於JSSE的連接器,那么您應該使用keytool生成密鑰和CSR:這樣對您來說會更容易。 如果您希望使用基於APR的連接器,則應該從命令行使用OpenSSL來操作所有內容。

(請注意,在即將推出的Apache Tomcat 9中(可能是Tomcat 8,如果它得到后端移植,有一個相當不錯的變化)將接受任何這些格式的任何連接器的TLS配置。也就是說,你可以使用PEM編碼證書和在單獨的文件或Java / PKCS12密鑰庫與任一天然的基於APR-連接器基於JSSE的連接器的鍵。)

第三,如果你自己沒有生成密鑰(或者你真正信任的人,比如同事,NOC等),那么@EJP是對的:你的證書不安全。 如果您的證書頒發機構為您生成了密鑰,那么您真的應該重新開始。 您沒有理由相信您的證書頒發機構。

(至於不知道哪個CA簽署了您的密鑰......您擁有的各種證書不應該有任何神秘的標識或類似的東西。證書頒發機構的全部意義在於它是眾所周知和值得信賴的。您不應該難以確定CA是基於您面前的證書的。如果您無法確定涉及哪個CA,您可能希望將此任務交給更熟悉X.509的其他人證書。)

  1. 如前所述,它取決於您的連接器,基於Apr的連接器使用openssl(單個文件),基於JSSE的連接器使用java運行時ssl實現(密鑰庫)。 當http客戶端/請求的數量增加時,Apr表現得更好(一般來說)。

  2. Fedora 鏈接建議使用/ etc / pki / app / private作為存儲私鑰和證書的位置。 我們使用/ opt / pki / httpd / private。

  3. 用戶無關緊要,只要它可以寫入密鑰庫文件,但密鑰庫應該由運行tomcat的用戶(在我們的例子中使用組)擁有(可寫)。

  4. 您必須將證書,捆綁和密鑰導入密鑰庫,最好按此順序。 假設它們是PEM編碼的(因為它們在apache httpd中工作),你可以使用pkcs路由:

openssl pkcs12 -export -in our.crt -inkey our.key \\ -out our.p12 -name some-alias \\ -CAfile gd_bundle-g2-g1.crt -caname root -chain

使用changeit作為密碼。 有時-CAfile -caname不起作用,你必須使用-certfile gd ...而不是。

然后轉換為密鑰庫:

keytool -importkeystore \
    -deststorepass changeit -destkeypass changeit -destkeystore our.jks \
    -srckeystore our.p12 -srcstoretype PKCS12 -srcstorepass changeit \
    -alias application

你真的想要Tomcat自己處理SSL,還是它背后是一個Web服務器,無論如何要為它處理SSL? 如果是后者,只需注釋掉server.xml中的SSL連接器即可。

暫無
暫無

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

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