最近几天的问题是我正在尝试加密我正在处理的某些项目。 由于Docker对我来说是一个很棒的解决方案(如果它在本地运行,它将远程运行),据我了解,我得到了3层可以实现ssl证书的层。 第一层是实例或在我而言是本地,aws或google的VM。第二层是Docker守护进程(充当服务器或所有正在运行的容器的管理器),最后一层是在jdk-alpine环境(可能是tomcat服务器..)上运行的spring boot应用或服务。
要对应用程序进行加密并通过我的inteliJ运行,一切都会顺利进行,并且我获得了安全的应用程序连接。一旦我构建了包含jar应用程序的docker文件并使用以下代码运行它:
docker run -p 443:8443 myImage
我收到错误消息:
配置为侦听端口8443的Tomcat连接器无法启动。该端口可能已在使用中,或者连接器配置错误。
无论我在spring boot application.properties中定义什么端口
#HTTPS
server.port: 8443
server.ssl.key-store: https-key.jks
server.ssl.key-store-password: password
server.ssl.keyStoreType: JKS
server.ssl.keyAlias: https-key
我收到相同的消息,表明该端口已被使用,这意味着我缺少某些东西。
任何与在Docker上运行的spring boot应用程序实现https://连接的帮助/指南,对我的工作都是很大的嘘声,我将不胜感激!
答案 0 :(得分:0)
我过去已使用SSL配置Spring Boot。它奏效了,但是我发现添加nginx
是一个更加灵活,文档完善和更快的解决方案(从性能的角度来看)。
Nginx可以充当反向代理,因此,当用户请求example.com:443
时,SSL将被nginx
终止,并转发到侦听{{ 1}}没有暴露于外界。例如
8080
有tutorial,其中包含更详细的信息,还有stackoverflow post,来自同一人在使用server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert;
ssl_certificate_key /path/to/key;
location / {
proxy_pass http://spring_boot_application;
}
upstream spring_boot_application {
server spring_boot_application:8080;
}
的情况下进行的操作。