[英]How to configure tomcat 7 with SSL on Ubuntu 14 - the unanswered questions
有數百個在tomcat上安裝SSL的指南,但我找不到這些關鍵問題。
有兩種方法可以安裝SSL:一種是我們的keytool,另一種是簡單地將證書文件放在FS上,並將server.xml指向這些文件(不使用keytool)。
如果有人知道答案,我將非常感激這些問題:
我們不知道哪個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的其他人證書。)
如前所述,它取決於您的連接器,基於Apr的連接器使用openssl(單個文件),基於JSSE的連接器使用java運行時ssl實現(密鑰庫)。 當http客戶端/請求的數量增加時,Apr表現得更好(一般來說)。
Fedora 鏈接建議使用/ etc / pki / app / private作為存儲私鑰和證書的位置。 我們使用/ opt / pki / httpd / private。
用戶無關緊要,只要它可以寫入密鑰庫文件,但密鑰庫應該由運行tomcat的用戶(在我們的例子中使用組)擁有(可寫)。
您必須將證書,捆綁和密鑰導入密鑰庫,最好按此順序。 假設它們是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.