4

Spring構成サーバーとクライアントを使用して構成プロパティを暗号化および復号化しようとしています。スプリング ブート アプリケーション (サーバーとクライアント) があり、サーバーを使用して暗号化されたパスワード プロパティがあり、クライアントで同じキーを使用して復号化しようとしていますが、エラーが発生しています。構成サーバー クライアントが構成サーバーによって最初に暗号化されたこれらのプロパティを復号化できるようにしようとしています。私が従った手順は次のとおりです。

  1. フル機能の JCE をインストールし、JRE lib/security 内の 2 つのポリシー ファイルを置き換えます

  2. keytool を使用して鍵を生成する

    keytool -genkeypair -alias config-server-key -keyalg RSA \
    -keysize 4096 -sigalg SHA512withRSA -dname "CN=*.domain.com,OU=EUS,O=eusdom,L=City,S=WA,C=US" \
    -keypass keyPass -keystore config-server.jks -storepass keys3crt
    
  3. クラウド セキュリティの依存関係を pom ファイルに追加しました (構成サーバーとクライアントの pom の両方にこれらを追加しました)。

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-rsa</artifactId>
    <version>1.0.1.RELEASE</version>
    </dependency>
    
  4. 暗号化関連の構成 (構成サーバーとクライアントで使用される同じ値)bootstrap.ymlも試してみましたapplication.yml

    encrypt:
    key-store:
        location: file:///D:/encrypt-server/config-server.jks
        password: keyPass
        alias: config-server-key
        secret: keys3crt
    
  5. 私の構成サーバーのブートストラップは次のようになります

    spring:
      application:
        name: config-service
      cloud:
        config:
            server:
                git:
                    uri: https://github.com/<>/spring-config-repo
                encrypt:
                    enabled: false
    server:
      port: 8888
    
  6. 構成サーバーを使用して passWord プロパティを暗号化する

    curl -X POST --data-urlencode d3v3L \  http://localhost:8888/encrypt
    
  7. 構成サーバーを使用してプロパティの復号化を試みます

    curl  http://localhost:8888/decrypt  -d <encryptedVale>
    

エラーを下回っています

    {"timestamp":1472667297292,"status":500,"error":"Internal Server Error","exception":"java.lang.IllegalStateException","message":"Cannot decrypt","path":"/decrypt"}
  1. 構成クライアントを使用して暗号化されたプロパティを出力しようとしました (注: 3,4 に従って依存関係と暗号化キーの詳細を追加しました)

    @RefreshScope
    @Component
    @RestController
    public class Greeter {
    
    @Value("${cassandra.hostnames}")
    String hostnames;
    
    @Value("${cassandra.username}")
    String userName;
    
    @Value("${cassandra.password}")
    String passWord;
    
    @RequestMapping(value = "/", produces = "application/json")
    public List<String> index(){
        List<String> env = Arrays.asList(
            "userName is: " + userName,
            "passWord is: " + passWord,
    );
    return env;
    }
    

    }

  2. java.lang.IllegalStateException: Cannot decrypt: key=cassandra.passwordエラーが発生しています

  3. 注:設定サーバーで復号化しようとしました

     encrypt:
      enabled: false
    

    ここで何か不足している場合はお知らせください。どんな助けにも感謝します。

4

1 に答える 1