기존의 MSSQL 연결 코드
const config = {
user: process.env.MSSQL_USER,
password: process.env.MSSQL_PASSWORD,
server: process.env.MSSQL_SERVER,
database: process.env.MSSQL_DB,
options: {
encrypt: true,
cryptoCredentialsDetails: {
minVersion: "TLSv1.3",
},
},
해당 코드로 실행시에는 여러 에러코드가 발생했다.
< 에러 내용 >
(node:17836) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version.
(Use `node --trace-deprecation ...` to show where the warning was created)
데이터베이스 연결에 실패했습니다.
originalError: ConnectionError: Failed to connect to 110.10.130.21:1433 - C84E0000:error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:124:
그리고 계속된 구글링을 통해 다음과 같이 코드를 수정하였다.
// 데이터베이스 연결 설정
const config = {
type: "mssql",
server: process.env.MSSQL_SERVER,
database: process.env.MSSQL_DB,
authentication: {
type: "default",
options: {
userName: process.env.MSSQL_USER,
password: process.env.MSSQL_PASSWORD,
},
},
options: {
encrypt: false,
enableArithAbort: true,
cryptoCredentialsDetails: {
minVersion: "TLSv1",
},
trustServerCertificate: true,
},
};
(async function () {
try {
// 데이터베이스 연결
await sql.connect(config);
console.log("데이터베이스에 연결되었습니다.");
} catch (err) {
console.error("데이터베이스 연결에 실패했습니다.", err);
}
})();
자세히 읽어보기 보단 코드 한줄씩 붙여가며 계속 실행해본 것이라
성공한 이유가 궁금했다. 성공한 이유는 다음과 같다고 한다.
현재 코드에서 연결이 정상적으로 작동한 것은 다음과 같은 변경사항들 때문입니다:
encrypt: false로 변경함으로써 SSL/TLS 암호화를 사용하지 않게 되어 영향을 미칠 수 있습니다. 이것은 서버가 SSL/TLS 암호화를 지원하지 않을 때 문제를 해결할 수 있습니다. 하지만 보안상의 문제로 데이터 전송이 암호화되지 않게 됩니다.
trustServerCertificate: true 옵션을 추가하여 서버의 인증서를 무조건 신뢰하도록 설정했습니다. 이 변경 사항으로 인해 클라이언트가 서버의 인증서를 확인하지 않고 연결을 수락하게 됩니다. 인증서가 올바르지 않거나, 자가 서명된 인증서를 사용하는 경우에도 연결에 성공할 수 있습니다. 그럼에도 불구하고 이 설정은 보안상 좋지 않은 선택이며 데이터 공격에 취약해질 수 있습니다.
cryptoCredentialsDetails 옵션을 수정하여 최소 TLS 버전을 'TLSv1'로 변경했습니다. 이것은 이전에 발생한 TLS 버전 불일치 문제를 해결하는 데 도움이 되었을 수 있습니다.
변경된 코드는 연결 문제를 일시적으로 해결했지만, 중요한 것은 데이터베이스와 클라이언트 사이의 전송에 암호화된 연결을 사용하도록 설정하는 것입니다. SSL/TLS를 사용하여 데이터를 암호화하고, 유효한 서버 인증서를 사용하여 서버에 대한 신뢰를 높이는 것이 좋습니다. 이러한 설정을 적용하기 위해 데이터베이스 서버 관리자와 협력하는 것이 필요할 수 있습니다.
'입사후 공부한 내용' 카테고리의 다른 글
[개념정리] 오버로딩, 오버라이딩 (0) | 2023.06.22 |
---|---|
[React] 노마드코더 기초 (0) | 2023.06.21 |
[ASP.NET] MVC강의 기초 및 심화 (0) | 2023.06.13 |
[ASP.NET] 개념과 역사 (0) | 2023.06.13 |
AWS EC2 가상서버 만들기 + 연결하기 (0) | 2023.06.13 |