在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 -----
我们发现this post显示了如何将现有证书与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,我们得到&#34;此网页不可用&#34;来自铬。
netstat -a
显示它正在侦听端口8443(和80,但443上没有任何内容)
有什么想法吗?
答案 0 :(得分:3)
解决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
答案 1 :(得分:0)
让我们从清理一些事情开始吧。
首先,X.509证书是X.509证书,无论它们是捆绑在Java密钥库,PKCS12密钥库中,还是在基于OpenSSL的软件通常使用的单独PEM文件中。你可以在所有这些之间来回转换。
其次,Tomcat有两种不同类型的连接器:基于JSSE的连接器(目前都需要使用Java或PKCS12密钥库)和基于APR的本机连接器,这需要在磁盘上使用PEM编码的文件,就像Apache httpd那样。
基于JSSE的连接器优先选择基于本地APR的连接器有一个重要原因:性能。而且我不只是谈论几个百分点。 Recent benchmarks将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证书。)
答案 2 :(得分:0)
如前所述,它取决于您的连接器,基于Apr的连接器使用openssl(单个文件),基于JSSE的连接器使用java运行时ssl实现(密钥库)。当http客户端/请求数量增加时,Apr表现得更好(一般来说)。
Fedora link建议将/ etc / pki / app / private作为存储私钥和证书的位置。我们使用/ opt / pki / httpd / private。
用户无关紧要,只要它可以写入密钥库文件,但密钥库应该由运行tomcat的用户(在我们的例子中使用group)拥有(可写)。
您必须将证书,捆绑和密钥导入密钥库,最好按此顺序。假设它们是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
答案 3 :(得分:0)
你真的想要Tomcat自己处理SSL,还是它背后是一个Web服务器,无论如何要为它处理SSL?如果是后者,只需注释掉server.xml中的SSL连接器。