2012-02-08 3 views
11

Play framework [v1.2.3을 사용하고 있습니다]는 application.conf에 저장된 db 암호 암호화를 지원하지 않습니다. 이것은 일반 텍스트 파일로 저장됩니다. DBPlugin은이 속성을 읽고 연결 풀을 만듭니다.application.conf의 db 암호 암호화

이 암호를 암호화해야합니다. Jasypt을 사용하십시오. 일부 기업은 이것을 보안 수단으로 시행합니다.

누구나 이와 같은 작업을 시도 했습니까?

DBPlugin이 ApplicationStart에로드되므로 해킹 할 방법이 없습니다. 그러면 사용자 정의 플러그인을 작성하고 onConfigurationRead은 application.conf 등록 정보의 db.password에 대한 새 값을 설정합니다.

제안 사항?

+1

재미있는 질문입니다. [Play Google 그룹] (http://groups.google.com/group/play-framework)에 게시하여 최대 범위를 확보 할 수도 있습니다. – tmbrggmn

답변

11

마지막으로 Play Plugin을 작성하여이 문제를 해결했습니다. Play 플러그인을 작성하는 것도 매우 쉽습니다. 더 해독 방법이 없기 때문에 - 유일한 단점은 내가 org.jasypt.util.password.StrongPasswordEncryptor를 사용할 수 없습니다 때문이다

package plugin; 

import java.util.Properties; 

import org.jasypt.util.text.StrongTextEncryptor; 

import play.Play; 
import play.PlayPlugin; 

public class DBPasswordInject extends PlayPlugin { 

    @Override 
    public void onConfigurationRead() { 
     StrongTextEncryptor strongTextEncryptor = new StrongTextEncryptor(); 
     strongTextEncryptor.setPassword("$Look##$2");// this password has been used to encrypt 

     String encryptedPassword = Play.configuration.getProperty("db.pass"); 
     String decrypted = strongTextEncryptor.decrypt(encryptedPassword); 
     Play.configuration.setProperty("db.pass", decrypted); //override 

     super.onConfigurationRead(); 
    } 

} 

: 다음은 샘플 코드입니다.

+0

org.jasypt.encryption.StringEncryptor 클래스를 사용하는 경우 암호화 및 암호 해독에 모두 액세스 할 수 있습니다 –

1

글쎄 암호는 암호를 암호화하는 데 사용해야합니까? 기본 암호를 사용하면 안전하지 않습니다. 구성 파일에 넣으면 재귀적인 문제가 발생합니다. 내가 볼 수있는 유일한 해결책은 암호가 저장되어있는 곳에서 자신의 플러그인을 사용하고 응용 프로그램 속성에서 값을 변경하는 것입니다. 그러면 암호는 문제없이 crytped로 저장 될 수 있습니다. 적어도 Play1.x에서는.

+0

jasypt는 시스템 env 또는 java 특성에서 런타임시 암호화 암호를 검색 할 수있게합니다. 이 암호는 소스 제어 시스템에 체크인 할 필요가 없으며 사용자가 강조한 순환 문제가있을 필요가 없습니다. –

+0

암호를 명령 행에 입력하지 마십시오. 다른 속성 파일을 사용하는 경우 직접 재생 기능을 사용할 수 있습니다. – niels