Microsoft MVP성태의 닷넷 이야기
SSL 통신 문의 [링크 복사], [링크+제목 복사],
조회: 15009
글쓴 사람
민우
홈페이지
첨부 파일
 

안녕하세요

개인서버에 우분투20.04, Nginx, MariaDB, Net6(VS2022) 를 설치하였고 REST API 서버구축이 목표입니다
닷넷 프로그램에서 MariaDB 접속하면 데이터 잘 가져옵니다

그런데 보안 때문에 MariaDB 에서 yaSSL을 설정을 했는데요
WireShark 로 암호화패킷 확인했고 HeidiSQL 에서도 ssl 모드(인증서없이)로 접속하면 잘 작동합니다

그런데 제가 만드는 닷넷 프로그램에서는 DB 접속하면 ssl 때문에 예외가 발생하는데요 SSL 을 끄고 하면 잘됩니다.
검색해보면 ssl 을 끄고 하라는 내용들이 많은데
보안 때문에 ssl 은 반드시 사용해야하는 상황입니다


여기서 궁금한건 HeidiSQL로 ssl 접속 하거나 웹브라우저 https 연결시 사용자가 SSL 인증서를 따로 발급하는 과정이 없는데
이런 프로그램들은 자체적으로 인증서를 내장하고 있기 때문인가요?

제가 만드는 닷넷프로그램에서는 별도로 인증서를 발급해줘야하는건지
아니면 ssl 연결시 자동으로 서버에서 인증서를 수신하도록 추가 코드가 필요한건지
수만은 사용자가 사용하는 클라이언트 프로그램의 경우 인증서는 어떻게 발급되는건지

SSL 통신의 연결과 인증서를 어떻게 해야하는건지 궁금합니다








[최초 등록일: ]
[최종 수정일: 2/22/2022]


비밀번호

댓글 작성자
 



2022-02-22 03시06분
개인 서버에 만들었다는 걸로 봐서는 아마도 인증서도 정식 서명하지 않은 테스트 인증서를 사용했을 것으로 보이는데요, 이런 경우 SSL Negotiation 과정 중 정식 인증서가 아니어서 연결에 실패할 수 있습니다. 닷넷의 경우 대체로 이 과정이 엄격한데요, 다음의 글을 보시면,

SSL Socket 예제 - C/C++ 서버, C# 클라이언트
; https://www.sysnet.pe.kr/2/0/11410

SSL Socket 수준에서 validateCertificate 콜백을 넘겨 인증서의 유효성 검사를 무조건 허락하도록 return true를 하는 코드를 볼 수 있습니다. 지금 닷넷에서 사용 중인 MariaDB 클라이언트 라이브러리에도 그런 식의 인증서 유효성 검사를 무시할 수 있는 수단이 있을 것입니다.

혹은, 다음의 글에 보면,

C# - SmtpClient로 SMTP + SSL/TLS 서버를 이용하는 방법
; https://www.sysnet.pe.kr/2/0/11537

전역적으로 설정하는 "System.Net.ServicePointManager.ServerCertificateValidationCallback" 콜백이 있습니다. 여기서도 return true를 하면... 아마도 잘 동작할 것입니다.
정성태
2022-02-22 03시17분
[민우] 네
현재는 집에 개인서버로 연습중이고 SSL을 적용한 REST API 서버구축 방법을 익히면 업무에 적용해보려고 합니다
알려주신 자료들 잘 참고하겠습니다!
빠른 답변 감사합니다 ^^
[guest]
2022-02-22 03시23분
아래의 코드를 보니까,

https://learn.microsoft.com/en-us/azure/mysql/#net-mysqlconnector

MySqlConnector의 경우 callback을 통한 무시는 제공하지 않고 SslMode = MySqlSslMode.VerifyCA와 함께 테스트 인증서 측의 CA에 대한 공개키 파일을 등록하고 있습니다.

해보진 않았지만, 아래의 글을 보면 제가 답변한 것과 같은 식의 콜백도 있는 것 같습니다.

MySqlConnection.RemoteCertificateValidationCallback property
; https://mysqlconnector.net/api/mysqlconnector/mysqlconnection/remotecertificatevalidationcallback/

"
SslMode must be set to Preferred or Required in order for this delegate to be invoked. See the documentation for RemoteCertificateValidationCallback for more information on the values passed to this delegate.
"
정성태
2022-02-22 03시34분
[민우] 네 SSL 인증은 처음이라 복잡해보이는데 보안을 위해 이번에 확실히 잘 알아둬야할것같습니다
추가 댓글도 감사합니다 ^^
[guest]
2022-03-01 08시31분
[민우] 말씀대로 MySqlConnector 패키지를 Nuget 으로 설치해보니 아래 코드로 간단하게 작동하네요
혹시 MySql.Data 패키지가 이미 설치되어있다면 이것을 먼저 제거하고 MySqlConnector 패키지를 설치해야한다네요.

데이터 잘 가져오고 와이어샤크로 암호화 데이터 패킷도 확인했습니다.

// MariaDB SSL 접속
var builder = new MySqlConnectionStringBuilder
{
    Server = "123.123.123.123",
    UserID = "user01",
    Password = "12345678",
    Database = "test_db",
    SslMode = MySqlSslMode.Preferred // Preferred 또는 Required 두가지만 가능
};

using (MySqlConnection conn = new MySqlConnection(builder.ConnectionString))
{
    conn.Open();
    string QUERY = "SELECT * FROM DEPT; SELECT * FROM EMP;";
    var da = new MySqlDataAdapter(QUERY, conn);
    DataSet ds = new DataSet();
    da.Fill(ds);
}

SslMode 값은 Preferred, Required 두개만 사용이 가능하고 나머지 다른 값들은 예외 발생합니다
그리고 RemoteCertificateValidationCallback 콜백은 여러가지로 시도해봤지만 전혀 호출이 되지 않네요..
어쨌든 콜백과 무관하게 MySqlConnector 패키지로 MariaDB SSL 접속은 간단히 해결되었습니다.

일단 제가 시도해본 결과를 그대로 적어봅니다
감사합니다~~
[guest]
2022-03-01 09시36분
후기 감사합니다. ^^ 이런 피드백 너무 좋습니다.
정성태

... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
891임동찬7/6/201018229        답변글 [추가]: [답변]: 아래 887번에 대한 추가 질문
892정성태7/6/201015363            답변글 [답변]: [추가]: [답변]: 아래 887번에 대한 추가 질문
888김재영7/5/201015205TFS에 반드시! SQL Report랑 SharePoint(or WSS)가 붙어야 합니까? [2]
887임동찬7/2/201016481WCF sendTimeout에 관하여... [1]
886김재영6/16/201016506스레드 선언시 (Parameterized/)ThreadStart에 정의되는 메소드의 위치에 질문이 있습니다. [3]
885장근배6/13/201024019Win32Exception 창 핸들 에러 [1]
883채동민6/10/201016294비동기 DB 쿼리관련 질문
884정성태6/10/201017611    답변글 [답변]: 비동기 DB 쿼리관련 질문
881최준영5/24/201017425load되지않은 아이템 load하는 방법? [1]
880임상일5/10/201019669VS2010 TestManager를 통한 UI Test 관련 질문입니다. [2]파일 다운로드1
879정용훈5/3/201020897wcf 인증 문제 [2]
878채동민4/20/201019986WCF에서 maxItemsInObjectGraph 오류 관련 질문드립니다. [2]
872날쌘돌이4/8/201022576Windows7 에서 IIS에서 폼인증 으로 디버깅.. [1]파일 다운로드1
871영초4/7/201017949실버라이트로 스캐너 구동 프로그램이 가능할까요? [1]
869김재영4/6/201016940이미 실행된 어셈블리 컨트롤 권한을 다른 어셈블리에서 가져올 수 있습니까? [2]
868Lime3/5/201020480WCF 에서의 DataTable 사용 [2]
867Dani...2/18/201020706Question - HTTP 401.3 on DELETE, PUT verbs [6]파일 다운로드1
865박근대2/16/201017159WCF 오류 문의. [1]
863날쌘돌이1/31/201019458ActiveX Cab에서 닷넷 dll 등록 [1]
862장근배1/28/201017301AppPolId를 알 수 있는 방법이 있는지요? [1]
864장근배2/1/201016958    답변글 [답변]: AppPolId를 알 수 있는 방법이 있는지요?
858생초보1/26/201017296안녕하세요.. 파일 생성 처리 문제로 .... [2]
857꼭지1/22/201023235How to support Basic + Windows authentication mode in WCF(RESTful service) [4]파일 다운로드2
856질의자1/13/201021012vcredist_x86 배포 관련 여쭙습니다. [1]
855임동찬1/13/201019363이벤트 핸들러와 쓰레드의 관계 2 [4]파일 다운로드2
854임동찬1/12/201019557이벤트 핸들러와 쓰레드의 관계 [1]
... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...