2012-06-26 3 views
0

Postgres 데이터베이스에 액세스 한 Java Swing 프런트 엔드 시스템을 구축하고 있습니다. 이번 주에 Jasypt을 발견하기 전에는 원래 Postgres의 자체 암호화 메커니즘을 사용할 계획이었습니다. 괜찮 았지만 네트워크상의 암호가 암호화되기를 바랬는데 왜 Jasypt로 바뀌 었습니다.Java Swing 앱과 Postgres db 간의 비밀번호 암호화

문제는 내 Postgres 저장 기능에 고정 암호가 입력되어야합니다. 나는. 입력 된 암호가 'aaa'이면 Postgres 저장 함수 ('aaa'제외)에 입력 한 다른 암호는 일치하지 않습니다.

이 두 암호화 메커니즘을 함께 사용할 수있는 방법이 있습니까? 아니면 Postgres를 덤프해야합니까?

을 내 사용자 테이블 :

CREATE TABLE "user" 
(
    id serial NOT NULL, 
    cryptpwd text NOT NULL, 
    md5pwd text NOT NULL, 
    ... 
) 

암호화 비밀번호 :

cryptedPassword = crypt(passwordIn, gen_salt('md5')); 
md5Password = md5(passwordIn); 
INSERT INTO "user"(username, cryptpwd, md5pwd, ...) 
     VALUES (usernameIn, cryptedPassword, md5Password, ...); 

암호 해독 비밀번호 : 나는 두 사람이 함께 일을 얻을 수없는 경우

select ..... from "user" .... where username = usernameIn and cryptpwd = crypt(passwordIn, cryptpwd); 

그때 나는 것 네트워크를 통해 암호화가 필요하므로 Postgres의 메커니즘을 덤프 할 수 있습니다.

또한 데이터베이스 연결 문자열과 데이터베이스 사용자 이름 및 암호 (모든 프레임 워크를 사용하지 않고 ... SSL을 사용하여 일반 jdbc 연결을 아직 구현하지 않음)와 관련하여 생각할 수는 없을 것입니다. 데이터베이스 수준에서 해독해야하기 때문에 Jasypt를 사용하십시오. SSL만으로도이 경우 충분합니까?

감사합니다.

답변

0

나는 모든 경로에서 SSL만으로 충분하다고 생각합니다. LedgerSMB (우리가 Perl 기반 임에도 불구하고)에서 우리는 뭔가 다른 것을하고 서버 간의 SSL 연결과 서버와 클라이언트 사이에 의존합니다. 당신의 접근 방식에 대해 생각할 몇 가지가 있습니다.

우리는 실제로 클라이언트의 미들웨어에 SSL 연결을 통해 재사용 가능한 형식 (일반 텍스트)으로 전달한 다음 다른 SSL 연결을 사용하여이 방법으로 인증하기 위해 PostgreSQL에 로그인합니다. 이것은 정상적으로 작동하지만 문제가되는 영역은 문제 영역과 비슷합니다. 여기에는 다음이 포함됩니다.

  1. 로깅. 가능한 암호가 실수로 기록 될 수 있습니까? 이것은 LedgerSMB에 대한 우려 사항이며 우리가 취할 수있는 조치를 취하고 있지만 잘못 설정된 서버 또는 변조 된 프로그램이 사용자 이름과 암호를 기록 할 수 있습니다. 여기서는 주로 미들웨어 수준이지만, 쿼리 로깅도이 작업을 수행 할 수 있습니다.

  2. 실수로 자격 증명을 다시 사용할 수 있습니까? 우리는 몇 가지 방법으로이를 방지하지만 고려해야 할 가치가 있습니다.

전체적으로 SSL을 신뢰합니다. 그 이상으로 추가 암호화를 추가 할 필요가 많지 않으며 키 관리는 IMO의 한계 이익에 가치가없는 많은 복잡성을 추가합니다.