geoserver加密


关于geoserver关于数据源加密
geoserver关于数据源的加密方式存在三种plain text、weak PBE、strong PBE,三种方式,geoserver默认的加密方式是weak PBE,关于加密方式的修改可以再geoserver的应用中进行修改,如图:

plain text:是不对数据源密码进行加密的方式,当选择这种方式是,数据源的密码不会进行任何的加密操作,当我们以geoserver-manager的jar包获取数据源信息的时候,数据源密码会以“plain:密码”形式展示,其中密码为未加密密码,而plain则采用plain text 方式进行加密的一种象征。
weak PBE:使用相对容易破解的基本加密方法。加密密钥是从密码中迭代使用MD5 1000次得到的。加密算法本身是DES(数据加密标准)。DES的有效密钥长度为56位。当我们以geoserver-manager的jar包获取数据源信息的时候,数据源密码会以“crypt1:密码”的形式展示,其中的密码是通过简单加密后的,而crypt1则是weak PBE加密形式的标识
strong PBE:使用基于带CBC的AES 256位算法的更强的加密方法。密钥长度是256位,使用SHA-256而不是MD5导出。当我们以geoserver-manager的jar包获取数据源信息的时候,数据源密码会以”ctypt2:密码“的形式展示,其中的密码是通过强加密算法得到的,而crypt2是strong PBE加密形式的标识。
本文主要讲述weak PBE加密算法的详细内容,对于strong PBE和plain text的加密方式不做过多的描述。
因为工作的需要,本文只针对geoserver2.8.3这个版本进行讲解:
1、加密原代码:
关于加密形式的源代码可以根据:eoserver-2.8.3\src\main\src\main\java\org\geoserver\security\GeoServerSecurityManager.java,该文件的3235行开始追溯;具体的加密内容可根据:geoserver-2.8.3\src\main\src\main\java\org\geoserver\security\password\GeoServerPBEPasswordEncoder.java文件的85行开始追溯

weak PBE中采用的PBEWITHMD5ANDDES的加密形式是需要一个随机的盐值的,源码中盐值为null。
解密:解密需要获取到key值,而key值的获取需要用到加密认证文件,该文件一般存放在geoserver引擎的data\security下,名称为geoserver.jceks。
解密具体代码如下所示:

char[] passworder = "geoserver".toCharArray(); 
       String alias = "config:password:key";
       KeyStore ks = KeyStore.getInstance("JCEKS");
       InputStream fis = this.getClass().getClassLoader().getResourceAsStream("geoserver.jceks");
              ks.load(fis, passworder);
              fis.close();
       Key key = ks.getKey(alias, passworder);
        byte[] password = key.getEncoded();
       char[] chars = toChars(password);
       StandardPBEStringEncryptor stringEncrypter =new StandardPBEStringEncryptor();
       stringEncrypter.setPasswordCharArray(chars);
       stringEncrypter.setAlgorithm("PBEWITHMD5ANDDES");
       passwd = stringEncrypter.decrypt(map.get("passwd").replaceFirst("crypt1:", ""));

改代码需要导入两个和加密相关的jar包,pom如下:

<dependency>
     <groupId>org.jasypt</groupId>
     <artifactId>jasypt</artifactId>
     <version>1.8</version>
  </dependency>
  <dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-core</artifactId>
   <version>3.1.0.RELEASE</version>
  </dependency> 

转载自:https://blog.csdn.net/zhang06105586/article/details/85063884

You may also like...