본문으로 바로가기

 

에러 발생

라라벨 프로젝트에서 MSSQL 서버에 연결 실패하며 에러 메시지 발생.

 

Error Message

Illuminate\Database\QueryException
SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:self signed certificate] (SQL: select top 10 * from TA_ORDER_DATA)

 

서버간 보안 연결 여부에 따라 발생할 수 있다(SSL 인증서 적용 여부 등).

아래는 microsoft 의 문서 설명이다.

 

Description 기본값
TrustServerCertificate 인증서를 신뢰하려면 1 또는 true 입니다.
인증서를 신뢰하지 않으려면 0 또는 false 입니다.
클라이언트가 자체 서명된 서버 인증서를 신뢰해야 하는지(1 또는 true) 또는 거부해야 하는지(0 또는 false) 여부를 지정합니다. false(0)

 

해결 방법

config/database.php 파일을 열어 sqlsrv 연결 설정에

'trust_server_certificate' => true 라인을 추가한다(true 로 안되면 false).

 

config/database.php
...(생략)...
'sqlsrv' => [
    'driver' => 'sqlsrv',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_MSSQL_HOST', 'x.x.x.x'),
    'port' => env('DB_MSSQL_PORT', '1433'),
    'database' => env('DB_MSSQL_DATABASE', 'forge'),
    'username' => env('DB_MSSQL_USERNAME', 'forge'),
    'password' => env('DB_MSSQL_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'trust_server_certificate' => true, // 추가
],
...(생략)...

 

레거시에서는 아래와 같이 설정했었다.

 

$conn_info = array("Database" => $db,
                    "UID" => $user,
                    "PWD" => $pass,
                    "CharacterSet" => "UTF-8",
                    "Encrypt" => false,
                    "TrustServerCertificate" => false
                );

$db_conn = sqlsrv_connect($host, $conn_info) or die( print_r(sqlsrv_errors(), true));