我希望使用 tomcat 连接器 mod_jk 为 tomcat 6 和 apache web 服务器配置 SSL。我对此还很陌生,所以请耐心等待。
我已购买 SSL 证书并使用密钥库文件在 tomcat 中配置。如果直接通过 https 访问 tomcat,则一切正常。现在我需要在 tomcat 前面安装 apache,我的问题是,我需要在 tomcat 和 apache 中都提供证书还是只需要在 tomcat 中提供证书?apache 不是应该将请求传递给 tomcat(使用 JkExtractSSL)并让它处理 ssl 身份验证(证书验证)吗?
如果需要在 apache 和 tomcat 中配置证书路径,那么我有 cert.p7b 和 certreq.csr 文件,它们肯定与 apache 不兼容,您能告诉我该怎么做吗?
到目前为止我有以下配置:
httpd.conf:
LoadModule ssl_module modules/mod_ssl.so
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /mywebapp/* worker1
JkExtractSSL On
JkHTTPSIndicator HTTPS
JkSESSIONIndicator SSL_SESSION_ID
JkCIPHERIndicator SSL_CIPHER
JkCERTSIndicator SSL_CLIENT_CERT
<VirtualHost _default_:80>
DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"
Alias /mywebap "/var/lib/tomcat6/webapps/mywebapp"
<Directory "/var/lib/tomcat6/webapps/mywebapp">
Options Indexes FollowSymLinks
AllowOverride NONE
Order allow,deny
Allow from all
</Directory>
<Location "/mywebapp/WEB-INF/">
AllowOverride None
Deny from all
</Location>
</VirtualHost>
Include conf/extra/httpd-ssl.conf
httpd-ssl-配置:
<VirtualHost _default_:443>
DocumentRoot "/var/lib/tomcat6/webapps/mywebapp"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLOptions +StdEnvVars +ExportCertData
Alias /mywebapp "/var/lib/tomcat6/webapps/mywebapp"
<Directory "/var/lib/tomcat6/webapps/mywebapp">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
JkMount /mywebapp/* worker1
<Location "/mywebapp/WEB-INF/">
AllowOverride None
Deny from all
</Location>
</VirtualHost>
这里需要特别指出的是,httpd-ssl.conf 中没有配置 SSLCertificateFile 和 SSLCertificateKeyFile,因为我不确定 tomcat 和 apache web 服务器是否都需要它。我已经在 tomcat 中使用 keystore 文件对其进行了配置。
答案1
SSL 用于客户端和 Web 服务之间的加密通信。如果您将 Apache 放在 Tomcat 前面,则需要使用 SSL 证书配置 Apache……而对于 Tomcat,您根本不需要它,因为 Apache 正在处理所有客户端通信。
如果需要在 apache 和 tomcat 中配置证书路径,那么我有 cert.p7b 和 certreq.csr 文件,它们肯定与 apache 不兼容,您能告诉我该怎么做吗?
该.csr
文件是您的证书请求,并不重要。
这个问题
有链接可以帮助您将.p7b
文件转换为 PEM 编码的证书以供 Apache 使用。
您还可以使用以下命令从密钥库中导出 PEM 编码的证书-exportcert
:
keytool -exportcert -alias <alias> | openssl x509 -inform der
该JkExtractSSL
指令告诉 Apache 将一些 SSL 相关信息传递给 Tomcat。根据这个文件,其中包括以下环境变量:
SSL_CIPHER
SSL_CIPHER_USEKEYSIZE
SSL_SESSION_ID
SSL_CLIENT_CERT_CHAIN_
n
答案2
好吧,看来我无法评论你的帖子,larsks,所以我把这个作为答案发布出来。谢谢你的回复。它帮助我澄清了一些事情。因此,根据您的回复,我按照您的建议.cer
从命令生成了文件keytool -exportcert
。但是,现在当我启动 apache 时,我收到以下错误:
Error: "[error] mod_ssl: Init: Private key not found (OpenSSL library error follows [error] OpenSSL: error:0D084069:asn1 encoding routines:d2i_ASN1_SET:bad tag [error] OpenSSL:
我谷歌了一下,发现“Apache 无法读取受密码保护的私钥”。密钥不应该与证书一起导出吗?显然不是。那么我该如何让 Apache 读取私钥,以及我在哪里可以找到私钥?