spring 如何在Tomcat上使用Docker上的SSL部署Web应用程序

ntjbwcob  于 2023-04-28  发布在  Spring
关注(0)|答案(1)|浏览(143)

我有一个Web应用程序(。war)并希望将其部署在Tomcat服务器上。此外,REST API通信应该通过SSL进行,并移交带有所有这些更改的docker镜像。

mkshixfv

mkshixfv1#

这个过程被分成几个小步骤。以下是使用Tomcat和SSL在docker上部署Web应用的步骤:
1.使用OpenSSL生成密钥和crt文件并以PKCS 12格式导出
1.更新服务器。使用SSL配置的xml
1.创建Dockerfile
1.构建镜像并在docker容器中运行
1.导出docker镜像文件
在我们开始之前,从将要部署的web应用程序(而不是spring Boot 应用程序)中准备好war文件。
如果这是一个maven项目,这个命令可以帮助-
mvn清洁包

开始吧:

OpenSSL生成SSL密钥,导出为PKCS 12格式

***OpenSSL

下载OpenSSL,或者如果您的系统上安装了Git,找到这个路径并双击
C:\Program Files\Git\usr\bin\openssl.exe
将打开OpenSSL命令提示符。
有多种方法来创建密钥和证书,如keytool,openssl。选择越多,困惑越多。我建议不要尝试多种解决方案,因为在服务器上部署时可能会遇到错误。
下面是我们可以通过OpenSSL执行的几个命令,以及可以用作密钥库文件的结果文件。

req -newkey rsa:4096 -x509 -sha256 -out <path-to-save>\server.crt -keyout <path-to-save>\server.key -days 365

在控制台上提供此密钥的密码短语并提供其他详细信息。

  • 我们现在有两个文件服务器。密钥和服务器。crt.创建PKCS 12格式文件 *
pkcs12 -export -out <path-to-save>\server.p12 -inkey server.key -in server.crt
  • server.p12是Tomcat用于SSL配置的文件 *

更新Tomcat服务器的SSL配置更改。XML

在您的机器上安装Tomcat。服务器。xml文件可位于
\conf\server。XML
在标签内添加以下代码段:

<Connector 
    port="8443" 
    protocol="org.apache.coyote.http11.Http11NioProtocol"   
    maxThreads="150" 
    SSLEnabled="true" 
    scheme="https" 
    secure="true"           
    clientAuth="false" 
    sslProtocol="TLS"           
    sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" 
    keystoreType="PKCS12"
    keystoreFile="<server.p12-file-location>" 
    keystorePass="<passphrase-provided-while-generating-key>"
    />

到目前为止,我们已经创建了keystore文件并使用SSL配置配置了tomcat。

  • 要测试它是否工作,请将war文件复制到\webapps目录中,然后双击\bin\startup启动tomcat。bat文件 *

应该能够通过HTTPS协议的浏览器接收GET API的响应。由于这是一个自签名的证书,而不是由授权的第三方提供的,因此请在浏览器上手动进行以命中url。

生成Dockerfile

要在docker上运行启用SSL的tomcat应用,需要Dockerfile
示例Dockerfile,包含所有必需的步骤:

FROM tomcat:9.0.5-jre8
EXPOSE 8080
EXPOSE 8443

#copy p12 file location to docker tomcat path
COPY ./ssl /usr/local/tomcat/ssl

#Copy updated server.xml to docker
COPY ./server.xml /usr/local/tomcat/conf/server.xml

#Copy war file to docker tomcat \webapps folder
COPY ./target/WebAppHTTPS.war /usr/local/tomcat/webapps/WebAppHTTPS.war

相应地更新您的路径,或者可以遵循此文件结构以使其易于访问。

|
|---ssl
|   |
|   |---server.p12
|
|---target
|   |
|   |---WebAppHTTPS.war
|
|---Dockerfile
|
|---server.xml

构建Docker镜像并在容器中运行

执行以下命令,将应用部署到Docker容器上:

docker build -t <any-name-like-sslwebapp> <location-to-Dockerfile>

这将在执行Dockerfile中提供的所有命令时构建一个docker镜像。

docker run -p 8443:8443 <name-provided-earlier-like-sslwebapp>

此命令显示控制台上的所有日志。如果没有错误,请按Ctrl+C并点击下面的命令以分离模式运行。

docker run -d -p 8443:8443 <name-provided-earlier-like-sslwebapp>

从浏览器中使用https命中GET API URL。这就是SSL配置的方式。

导出Docker镜像

这是为了向您的同事或任何不使用任何repo的人提供Docker镜像。
执行以下命令以导出图像。tar格式

docker save -o \<path>\docker-image.tar sslwebapp

这里,sslwebapp是我们前面提供的image标记的名称。
共享此文件,接收者可以使用下面的命令来使用此图像

docker load -i \<tar-file-path>

相关问题