【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像

一、实验环境

 

操作系统: CentOS7.5 Minimal

GeoServer服务器:    192.168.1.101

 

二、软件包准备

 

jre-8u212-linux-x64.tar.gz

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

geoserver-2.14.2-bin.zip

https://versaweb.dl.sourceforge.net/project/geoserver/GeoServer/2.14.2/geoserver-2.14.2-bin.zip

jetty-distribution-9.2.13.v20150730.tar.gz

https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.2.13.v20150730/jetty-distribution-9.2.13.v20150730.tar.gz

 

三、在构建镜像的服务器

 

创建项目目录用户

#  mkdir  /root/GeoServer

# groupadd -g 2020 geoserver 

# useradd -u 2020 -g  geoserver geoserver 

将 准备的软件包上传到 工作目录  /root/GeoServer

#    ll  /root/GeoServer

geoserver-2.14.2-bin.zip

jetty-distribution-9.2.13.v20150730.tar.gz

jre-8u212-linux-x64.tar.gz

 

#  cd   /root/GeoServer

#  unzip geoserver-2.14.2-bin.zip  

#  tar  -zxf jetty-distribution-9.2.13.v20150730.tar.gz  

#  mv   geoserver-2.14.2    geoserver 

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第1张图片

 

从jetty解压包中拷贝ssl模块配置文件到geoserver目录

# cp jetty-distribution-9.2.13.v20150730/modules/ssl.mod geoserver/modules/

# ll geoserver/modules/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第2张图片

 

三、修改配置文件

 

# vim geoserver/modules/ssl.mod

注释或者删除标注的几行,此处配置重复,我们将在其他配置文件中配置。

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第3张图片

# vim geoserver/etc/jetty-ssl.xml

将此配置文件中配置,修改为标注所示

#######################################################

FALSE

 

   

      .*CBC.*

   

 

 

   

      .*DHE.*

   

 

 

   

      TLSv1.2

      TLSv1.3

   

 

#######################################################

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第4张图片

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第5张图片

①  禁用服务的SSL重协商机制

② 禁用不够安全密码套件,只启用安全密码套件

③ 只启用TLSv1.2 TLSv1.3 版本

 

 

# vim geoserver/start.ini

将此配置文件中配置,修改为标注所示:

① 禁用http模块

② 启用 https 和ssl 模块

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第6张图片

 

四、重新生成证书文件

 

GeoServer默认的证书keysize为1024 强度不够,需要重新生成。

# keytool \

-genkeypair \

-keystore keystore \

-alias mykey \

-keypass keypwd \

-storepass storepwd \

-keyalg RSA \

-keysize 2048 \

-validity 3650 \

-dname "CN=Jetty Server,OU=Open Source Development,O=Mort Bay Consulting,L=Unknown,ST=Unknown,C=Unknown"

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第7张图片

将新生成的证书拷贝到原证书目录覆盖

# mv keystore geoserver/etc/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第8张图片

这里我们只是更新了默认证书的的强度,没有更改 keypass(默认值为keypwd)和 storepass (默认值为storepwd)

如果要更新keypass和 storepass的值 :

# keytool \

-genkeypair \

-keystore keystore \

-alias mykey \

-keypass Keystore@1234567\

-storepass Keystore@7654321\

-keyalg RSA \

-keysize 2048 \

-validity 3650 \

-dname "CN=Jetty Server,OU=Open Source Development,O=Mort Bay Consulting,L=Unknown,ST=Unknown,C=Unknown"

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第9张图片

 

同步更新配置文件 geoserver/etc/jetty-ssl.xml 中的keypass和storepass,并用GeoServer自带的混淆工具将其混淆。

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第10张图片

① KeyStorePassword 对应 storepass

② KeyManagerPassword 对应 keypass

③ TrustStorePassword 对应 storepass

 

 

【jetty】关于jetty配置文件中证书密码的混淆和反混淆

https://www.jianshu.com/p/02b6225e96c3

 

# java -cp geoserver/lib/jetty-util-9.2.13.v20150730.jar org.eclipse.jetty.util.security.Password "Keystore@1234567"

# java -cp geoserver/lib/jetty-util-9.2.13.v20150730.jar org.eclipse.jetty.util.security.Password "Keystore@7654321"

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第11张图片

 

五、GeoServer 安装包的目录文件权限加固

 

# vim geoserver/bin/startup.sh

设置进程启动的umask,使得服务器启动后生成服务目录文件权限的最小化。

##########################

# Set umask

umask 0077

##########################

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第12张图片

删除windows bat脚本

#  rm  -rf   geoserver/bin/*.bat

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第13张图片

 

#   find  geoserver/  -type d  -exec chmod 750 {} \;

#  find  geoserver/  -type f  -exec chmod 640 {} \;

#  chmod  550  geoserver/bin/*.sh

# chmod 700 geoserver/etc

# chmod 400 geoserver/etc/keystore

 

将整改好的geoserver 目录打包,用于下面docker镜像的构建

# tar -zcf geoserver-2.14.2-bin.tar.gz geoserver

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第14张图片

 

六、构建GeoSever镜像

 

编写Dockerfile  

 

#  vim Dockerfile 

#############################################################

FROM centos:centos7.5.1804

ADD jre-8u212-linux-x64.tar.gz /usr/local

ADD geoserver-2.14.2-bin.tar.gz  /usr/local

ENV JAVA_HOME="/usr/local/jre1.8.0_212" \

    PATH="$JAVA_HOEM/bin:$PATH" \

    GEOSERVER_VERSION="2.14.2" \

    GEOSERVER_HOME="/usr/local/geoserver" \

    GEOSERVER_DATA_DIR="/usr/local/geoserver/data_dir"

RUN yum clean all && \

    rpm --rebuilddb && \

    yum -y install fontpackages-filesystem fontconfig xorg-x11-font-utils && \

    groupadd -g 2020 geoserver && \

    useradd -u 2020 -g  geoserver geoserver && \

    chown -R geoserver:geoserver /usr/local/geoserver

#ADD truetype.tar.gz  /usr/share/fonts

#RUN cd /usr/share/fonts && \

#    mkfontscale && \

#    mkfontdir && \

#    fc-cache

WORKDIR /home/geoserver

USER  geoserver

EXPOSE 8443

CMD ["sh","/usr/local/geoserver/bin/startup.sh"]

#############################################################

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第15张图片

① 如果有字体文件需要添加到镜像中,将 ttf字体文件放入 truetype 目录中,打包为 truetype.tar.gz

# docker build -f Dockerfile  -t  geoserver:2.14.2  .

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第16张图片

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第17张图片

 

#  docker  images  

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第18张图片

 

七、用构建的镜像启动一个容器测试

 

# mkdir  -p  /opt/geoserver/data_dir

# chown  -R  geoserver:geoserver  /opt/geoserver/data_dir

# chmod 750   /opt/geoserver/data_dir

#  docker run -it -d   --name  geoserver   -v /opt/geoserver/data_dir:/usr/local/geoserver/data_dir -p 8443:8443 geoserver:2.14.2

#  docker logs   -f   geoserver

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第19张图片

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第20张图片

浏览器访问测试: 

https://192.168.1.101:8443/

https://192.168.1.101:8443/geoserver

默认WEB管理登录用户名密码:

admin/geoserver

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第21张图片

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第22张图片

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第23张图片

 

八、安全加固效果验证

 

目录文件权限

 

宿主机目录文件权限

# ll /opt/geoserver/data_dir/

# ll /opt/geoserver/data_dir/styles/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第24张图片

容器目录文件权限

# docker exec -it geoserver  ls -l /usr/local/geoserver

# docker exec -it geoserver  ls -l /usr/local/geoserver/etc

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第25张图片

 

查看进程所有者

# docker exec -it geoserver ps aux

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第26张图片

 

查看自签名证书强度

# docker exec -it geoserver bash

$ /usr/local/jre1.8.0_212/bin/keytool  -v  -list  --keystore  /usr/local/geoserver/etc/keystore  --storepass  "storepwd"

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第27张图片

 

查看是否关闭重协商机制

 

# openssl s_client -connect 192.168.1.101:8443

 

查看服务端使用的密码套件

 

# echo > /dev/tcp/192.168.1.101/8443

# nmap -sV -p 8443 --script ssl* 192.168.1.101

 

查看服务端TLS版本

# echo > /dev/tcp/192.168.1.101/8443

# openssl s_client -connect 192.168.1.101:8443

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第28张图片

 

 

九、关于GeoSever安装包和服务启动后数据文件中涉及的明文密码

 

安装包文件

 

#  cd  /root/GeoServer

# grep -rin "password" geoserver/

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第29张图片

# grep -rin "password" geoserver/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第30张图片

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

 

geoserver/data_dir/security/usergroup/default/users.xml 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第31张图片

geoserver/etc/jdbcRealm.properties

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第32张图片

geoserver/etc/jetty-ssl.xml

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第33张图片

 

服务启动后数据文件

 

# ll /opt/geoserver/data_dir/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第34张图片

# grep -rin "password"  /opt/geoserver/data_dir/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第35张图片

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

data_dir/security/masterpw.info

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第36张图片

注:根据文本内容提示,这个文件在服务启动后可以删除

data_dir/security/usergroup/default/users.xml

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第37张图片

注:这个用户名密码明文默认是 admin/geoserver,GeoServer 管理界面的默认登录用户名密码

 

 

十、关于对配置文件中几种密码明文加密方式的选择和处理

 

GeoServer用户手册:密码

密码是任何安全系统的核心。本节介绍GeoServer如何处理密码。

https://www.osgeo.cn/geoserver-user-manual/security/passwd.html#password-encryption

 

 

安装包文件

#  cd  /root/GeoServer

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第38张图片

# grep -rin "password" geoserver/

 

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

geoserver/data_dir/security/usergroup/default/users.xml 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第39张图片

此处,密码使用的是摘要式加密,不可逆,符合安全要求。

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第40张图片

 

geoserver/etc/jdbcRealm.properties

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第41张图片

This is a sample properties file for the org.eclipse.jetty.security.JDBCLoginService。

此文件为示例配置文件,可以清空或者删除:

#  echo  >  geoserver/etc/jdbcRealm.properties

geoserver/etc/jetty-ssl.xml

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第42张图片

此处关于  geoserver/etc/keystore 的 keypass 和 storepass,为混淆加密方式。

 

服务启动后数据文件

 

# ll /opt/geoserver/data_dir/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第43张图片

# grep -rin "password"  /opt/geoserver/data_dir/

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第44张图片

根据排查,我们可从如下文件中看到明文/混淆/摘要 密码字眼:

data_dir/security/masterpw.info

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第45张图片

注:根据文本内容提示,这个文件在服务启动后将密码保存至别处,然后删除。

# rm  -f  data_dir/security/masterpw.info

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第46张图片

data_dir/security/usergroup/default/users.xml

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第47张图片

注:这个用户名密码明文默认是 admin/geoserver,GeoServer 管理界面的默认登录用户名密码

此处为不安全加密方式,我们在启动GeoServer后,需从界面上设置加密方式:

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第48张图片

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第49张图片

 

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第50张图片

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第51张图片

设置完成后,再查看 data_dir/security/usergroup/default/users.xml 文件中的加密方式:

【GeoServer】基于CentOS7.x构建GeoServer安全加固docker镜像_第52张图片

此时,密码使用的是摘要式加密,不可逆,符合安全要求。

 

综上所述,关于GeoServer 配置文件中密码加密:

1.  配置文件中关于 keypass storepass 用混淆加密

2. 管理界面的用户名密码使用digest摘要加密,不可逆加密

3. 数据库连接或外部OGC服务(如 cascading WMS 和 cascading WFS ,因此geoserver必须能够解码加密的密码并将其传递给外部服务)需要选用 strong PEB ,可逆加密

 

十一、参考

 

【GeoServer】CentOS7.x上GeoServer的安装部署

https://www.jianshu.com/p/cfcee37bc71e

 

【GeoSerer】GeoServer安全加固

https://www.jianshu.com/p/24fa9c218e2e

 

【GeoServer】How to specify the TLS version and algorithm type of GeoServer?

https://www.jianshu.com/p/01661e8e2a5e

 

【HTTPS】SSL/TLS协议安全之:不安全的重协商

https://www.anquanke.com/post/id/82989

 

【jetty】关于jetty配置文件中证书密码的混淆和反混淆

https://www.jianshu.com/p/02b6225e96c3

 

GeoServer用户手册

https://www.osgeo.cn/geoserver-user-manual/index.html

 

你可能感兴趣的:(docker,geoserver,ssl)