密码

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

密码加密

地理服务器配置存储两种类型的密码:

  • 的密码 用户帐户 访问地理服务器资源

  • 内部使用的密码 访问外部服务 如数据库和级联OGC服务

由于这些密码通常存储在磁盘上,因此强烈建议对它们进行加密,而不是存储为人类可读的文本。GeoServer Security提供了四种加密密码的方案: 空的纯文本摘要Password-based encryption (PBE) .

密码加密方案被指定为影响用于外部资源的密码的加密的全局设置,并被指定为每个资源的加密方案 user/group service 。外部资源的加密方案必须是 reversible ,而用户/组服务可以使用任何方案。

空的

这个方案是不可逆的。任何密码都被编码为空字符串,因此无法重新计算纯文本密码。此方案用于用户/组服务,并结合使用后端系统的身份验证机制。例如,针对LDAP服务器或JDBC数据库的用户名/密码验证。在这些场景中,将密码本地存储到geoserver没有意义。

纯文本

纯文本密码根本不提供加密。在这种情况下,任何有权访问文件系统的人都可以读取密码。出于明显的原因,除了最基本的测试服务器之外,不建议对任何服务器使用这种方法。密码 mypassword 编码为 plain:mypassword ,唯一描述用于编码/解码的算法的前缀。

摘要

摘要式加密不可逆。它通过迭代过程应用了100000次,即sha-256 cryptographic hash function 到密码。这个方案是“单向的”,因为它实际上不可能从散列表示中反向获取原始密码。请参见 可逆加密 有关可逆性的更多信息。

为了防止众所周知的攻击,一个称为 salt 在生成密钥时添加到密码中。对于每次消化,使用单独的随机盐。两次消化相同的密码会导致不同的哈希表示。

例如,密码 geoserver 被消化成 digest1:YgaweuS60t+mJNobGlf9hzUC6g7gGTtPEu0TlnUxFlv0fYtBuTsQDzZcBM4AfZHd . digest1 指示消化的用法。散列表示和salt是base 64编码的。

基于密码的加密

Password-based encryption (PBE)通常使用用户提供的密码来生成加密密钥。这个方案是可逆的。使用上一节中描述的随机盐。

备注

系统从不使用用户指定的密码,因为这些密码往往很弱。用于加密的密码使用安全的随机生成器生成,并存储在geoserver密钥存储中。可能的密码数是2^260。

geoserver支持两种形式的PBE。 弱PBE (geoserver默认设置)使用相对容易破解的基本加密方法。加密密钥是从密码派生的,使用 MD5 1000次迭代。加密算法本身是 DES (数据加密标准)。DES的有效密钥长度为56位,这对当今的计算机系统来说并不是真正的挑战。

强PBE 使用基于 AES 256位算法 CBC .密钥长度为256位,使用 SHA-256 而不是MD5。强烈建议使用强PBE。

例如,密码 geoserver 加密到 crypt1:KWhO7jrTz/Gi0oTQRKsVeCmWIZY5VZaD . crypt1 指示弱PBE的用法。强PBE的前缀是 crypt2 .密文和salt是base 64编码的。

可逆加密

密码加密方法可以是 可逆的 ,这意味着从加密版本获取纯文本密码是可能的(也是可取的)。数据库连接或外部OGC服务(如 cascading WMScascading WFS ,因为geoserver必须能够解码加密的密码并将其传递给外部服务。纯文本和PBE密码是可逆的。

不可逆密码提供最高级别的安全性,因此应用于用户帐户和其他任何可能的地方。强烈建议使用密码摘要,不需要安装不受限制的策略文件。

密钥和密钥库

要使可逆密码提供有意义的安全级别,必须以某种方式限制对密码的访问。在GeoServer,加密和解密密码涉及生成一个秘密共享密钥,存储在一个典型的Java中。 密钥库 .geoserver为此使用自己的keystore,命名为 geoserver.jceks 位于 security 地理服务器数据目录中的目录。此文件存储在 JCEKS format rather than the default JKS .JK不支持存储共享密钥。

geoserver密钥库受密码保护, 密钥库密码 .可以使用外部工具(如 keytool . 例如,以下命令将提示输入密钥库密码并列出密钥库的内容:

$ keytool -list -keystore geoserver.jceks -storetype "JCEKS"

密钥库密码

也可以设置 密钥库密码 用于地理服务器。此密码有两个用途:

默认情况下,生成密钥库密码并将其存储在名为 security/masterpw.info 使用纯文本。当从现有的geoserver数据目录(2.1.x及更低版本)升级时,该算法试图找出具有该角色的用户的密码。 ROLE_ADMINISTRATOR . 如果找到这样的密码并且密码长度至少为8个字符,GeoServer将使用此密码作为密钥库密码。同样,所选用户的名称可以在中找到 security/masterpw.info .

警告

文件 security/masterpw.info 有安全隐患。管理员应读取此文件并通过以 root 用户。成功后,应删除此文件。

警告

系统管理员应该做的第一件事是转储GeoServer生成的密钥库密码,将其存储在任何人都无法访问的位置,然后删除 security/masterpw.info 或者你把密码转储到的任何文件。

参照 活动密钥库密码提供程序 有关如何更改密钥库密码的信息。

备注

默认情况下,使用Keystore密码登录到管理GUI和restapi是禁用的。为了启用它,您需要手动更改密钥库密码提供程序配置.xml,通常位于 security/masterpw/default/config.xml ,通过添加以下语句:

``<loginEnabled>true</loginEnabled>``

密码策略

密码策略定义了对密码的限制,如密码长度、大小写和所需的字符类组合。添加时指定密码策略 用户/组服务 用于在创建新用户和更改现有用户的密码时限制密码。

每个用户/组服务都使用密码策略来强制执行这些规则。默认的geoserver密码策略实现支持以下可选约束:

  • 密码必须至少包含一个数字

  • 密码必须至少包含一个大写字母

  • 密码必须至少包含一个小写字母

  • 密码最小长度

  • 密码最大长度

参数口令

可以采用与目录设置类似的方式对用户密码进行参数化(请参见 参数化目录设置 )。当用于在密码字段中存储占位符的加密方法为纯文本或可逆(PBE、强PBE)时,支持参数化。不支持对占位符(如摘要)进行不可逆编码。相反,实际值可以在 geoserver-environment.properties 使用Geoserver支持的任何密码编码方法。下面提供了一些示例:

pwd.one=plain:clear_text_password
pwd.two=digest1:D9miJH/hVgfxZJscMafEtbtliG0ROxhLfsznyWfG38X2pda2JOSV4POi55PQI4tw
pwd.three=crypt1:xZJscMafEtbtliG0ROxhLfsznyWfG38X2pda2JOSV4POi55PQI4tw