리포지토리에서 암호를 처리하는 것은 정확한 문제가 무엇인지에 따라 다른 방식으로 처리됩니다.
1.하지 마십시오.
그리고 피하는 방법은 .gitignore, config.example 등의 일부 답변에서 다룹니다.
또는 2. 허가 된 사람 만 리포지토리에 액세스 할 수 있도록합니다.
즉, 비밀번호를 알고있는 사람들입니다. chmod
사용자 그룹이 떠 오릅니다. 리포지토리 또는 서버를 외부에서 호스팅하는 경우 Github 또는 AWS 직원이 볼 수있는 것과 같은 문제가 있습니까?
또는 3. 민감한 데이터를 암호화합니다 (이 회신의 목적)
민감한 정보 (예 : 비밀번호)가 포함 된 구성 파일을 공개 위치에 저장하려면 암호화해야합니다. 저장소에서 복구 할 때 파일을 해독하거나 암호화 된 형식에서 바로 사용할 수도 있습니다.
암호화 된 구성 데이터를 사용하는 예제 자바 스크립트 솔루션은 다음과 같습니다.
const fs = require('fs');
const NodeRSA = require('node-rsa');
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);
따라서 몇 줄의 Javascript 만 작성하여 암호화 된 구성 파일을 복구 할 수 있습니다.
파일 config.RSA
을 git 저장소에 넣으면 효과적으로 파일을 이진 파일로 만들 수 있으므로 Git과 같은 많은 이점 (예 : 변경 사항을 체리 선택하는 기능)을 잃게됩니다.
이에 대한 해결책은 키 값 쌍 또는 아마도 값을 암호화하는 것입니다. 예를 들어 민감한 정보를위한 별도의 파일이있는 경우 모든 값을 암호화하거나 한 파일에 모든 값이있는 경우 민감한 값만 암호화 할 수 있습니다. (아래 참조)
위의 예제는 테스트를 원하거나 RSA 키와 암호화 된 구성 파일이 있다고 가정 할 때 시작하려는 사람에게는 약간 쓸모가 없습니다 config.RSA
.
RSA 키와 구성 파일을 생성하기 위해 추가 된 코드가 있습니다.
const fs = require('fs');
const NodeRSA = require('node-rsa');
/////////////////////////////
// Generate some keys for testing
/////////////////////////////
const examplekey = new NodeRSA({b: 2048});
fs.writeFileSync('private.key', examplekey.exportKey('pkcs8-private'));
fs.writeFileSync('public.key', examplekey.exportKey('pkcs8-public'));
/////////////////////////////
// Do this on the Machine creating the config file
/////////////////////////////
const configToStore = {Goodbye: 'Cruel world'};
let publickey = new NodeRSA();
publickey.importKey(fs.readFileSync('public.key', 'utf8'));
fs.writeFileSync('config.RSA', publickey.encrypt(configToStore, 'base64'), 'utf8');
/////////////////////////////
// Do this on the Machine consuming the config file
/////////////////////////////
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);
값만 암호화
fs.writeFileSync('config.RSA', JSON.stringify(config,null,2), 'utf8');
이와 같은 방법으로 암호화 된 값으로 구성 파일을 해독 할 수 있습니다.
const savedconfig = JSON.parse(fs.readFileSync('config.RSA', 'utf8'));
let config = {...savedconfig};
Object.keys(savedconfig).forEach(key => {
config[key] = privatekey.decrypt(savedconfig[key], 'utf8');
});
별도의 행 (예를 들어, 각 구성 항목으로 Hello
하고 Goodbye
위), 힘내는 파일에 무슨 일이 일어나고 있는지 잘 인식하고 오히려 전체 파일보다 차이 등의 정보의 항목에 대한 변경 사항을 저장합니다. Git은 또한 병합 및 체리 픽 등을 더 잘 관리 할 수 있습니다.
그러나 민감한 정보의 변경 사항을 버전 관리할수록 SAFE REPOSITORY 솔루션 (2)으로 이동하고 암호화 된 정보 (3) 솔루션에서 멀어집니다.