error: no pg_hba.conf entry for host “비밀스런 IP”, user “비밀스런 유저 이름”, database “비밀스런 DB 이름 “, no encryption at Parser.parseErrorMessage (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/node_modules/pg-p..
2023. 8. 10. 16:50ㆍ에러대응
문제 상황
postgreSQL 을 사용한 RDS 를 로컬에서 테스트를 하려고 하던중 발생한 에러이다.
error: no pg_hba.conf entry for host “비밀스런 IP”, user “비밀스런 유저 이름”, database “비밀스런 DB 이름 “, no encryption
at Parser.parseErrorMessage (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/node_modules/pg-protocol/src/parser.ts:369:69)
at Parser.handlePacket (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/node_modules/pg-protocol/src/parser.ts:188:21)
at Parser.parse (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/node_modules/pg-protocol/src/parser.ts:103:30)
at Socket.<anonymous> (/Users/yunmun-yeol/Documents/nestjs/TicketNest-dev/node_modules/pg-protocol/src/index.ts:7:48)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:343:12)
at readableAddChunk (node:internal/streams/readable:316:9)
at Socket.Readable.push (node:internal/streams/readable:253:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
orm.config.ts 파일을 아래처럼 바꿔 보았다.
@Injectable()
export class typeORMConfig implements TypeOrmOptionsFactory {
constructor(private configService: ConfigService) {}
createTypeOrmOptions(): TypeOrmModuleOptions {
return {
type: 'postgres',
host: this.configService.get('DB_HOST'),
port: this.configService.get<number>('DB_PORT'),
username: this.configService.get('DB_USER'),
password: this.configService.get('DB_PASSWORD'),
database: this.configService.get('DB_DATABASE'),
entities: [UserEntity, GoodsEntity, BookingEntity], // TypeORM이 엔티티를 인식할 수 있게 설정
synchronize: false, //! 주의! 이거 true 되면 데이터베이스 리셋됩니다
logging: true, // 개발 편의를 위해 추가, 배포시 지워도 됩니다.
ssl: true, // <-- 추가한 부분
};
}
}
앞전의 에러가 해결되었다. 하지만 다른 에러가 발생하였다.
Error: self-signed certificate in certificate chain
at TLSSocket.onConnectSecure (node:_tls_wrap:1627:34)
at TLSSocket.emit (node:events:514:28)
at TLSSocket._finishInit (node:_tls_wrap:1038:8)
at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:824:12)
SOLVE
다시 orm.config.ts 파일을 수정
createTypeOrmOptions(): TypeOrmModuleOptions {
return {
// ... 나머지 설정들
ssl: {
rejectUnauthorized: false,
},
};
}
오류없이 작동을 했다.
하지만 이렇게 한다면 중간자 공격(Man-in-the-middle Attack) 에 취약해 질 수 있다.
프로덕션에서는 적절한 SSL 인증서를 구성하거나 AWS RDS 인증서를 노드에 추가하는 것이 좋을 듯 하다.
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.SSL.html