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

안녕하세요

개인서버에 우분투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://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl#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분
후기 감사합니다. ^^ 이런 피드백 너무 좋습니다.
정성태

1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...
NoWriterDateCnt.TitleFile(s)
5642차가워4/4/20228282UdpClient 패킷 수신 문의 [4]
5641장성욱4/4/20228270코어 할당 및 cpu 부하테스트 질문 [7]
5640icoo...4/4/20228271웹가든에서 메모리 동적 업데이트 방법 [1]
5639차가워4/4/20228039c++ 서버 c# 클라이언트 호환 문의 [1]
5638초급4/3/20228482c# sql server 연동 [1]
5637따봉이4/1/20228874Winform Form Load 후 자동 캡쳐관련 [1]파일 다운로드1
5636김철순3/31/20228717WPF에서 Richtext의 View 문의 [5]
5635guest3/30/20228431안정적인 pinning이 가능하네요. [3]파일 다운로드1
5633꿀주세요3/30/20228190선생님 마우스 클릭이벤트 질문이 있습니다. [4]
5632김현수3/30/20228582Remote Desktop으로 접속시 WPF UI 가 다시 그려지는 이벤트를 막을 수 없을까요? [3]
5631김기헌3/24/20228188WPF 컨트롤의 그래픽 처리관련 질문드립니다 [2]파일 다운로드1
5630장성욱3/24/20228082로깅관련 질문입니다. [2]
5629감사합니...3/23/20228265함수에서 예외가 발생하면 try ~ catch처리기를 찾을 때 까지 상위 함수로 계속 올라가나요? [2]
5628홍길동3/23/20228941질문드립니다. [2]파일 다운로드1
5626연준혁3/21/20228165안녕하세요. [3]
5625jaew...3/18/20229187c# 8.0 도서를 구입한 사람입니다. [1]
5624초보자3/17/20227846람다 캡처 관련 문의 [2]
5623한예지 donator3/15/20228095인터프리터 원리가 궁금합니다. [4]
5622김민아3/8/20228115const와 readonly의 명확한 차이가 이게 맞나요? [2]
5621장성욱3/8/20227899c# 로그 관련 질문 [1]
5620김민아3/7/20227816안녕하세요 비관리 객체를 반환하는 메소드 호출 시 궁금한 점이 있어서 질문드립니다 [2]
5619팡팡이3/3/20229279RSA 문의드립니다. [3]
5618김기헌3/2/20227691안녕하세요 생성자 옆에 this 키워드를 붙여 생성자를 여러 개 호출 시 질문드립니다 [2]
5617Edun2/25/20228130ArgumentOutOrRangeException에러 발생 [2]파일 다운로드1
5616csha...2/24/20227782readonly struct로 선언된 구조체를 특정 클래스에서 멤버변수로 가지는 경우 [1]
5615장성욱2/22/202210558SetThreadAffinityMask를 이용한 쓰레드 지정하는 방법에 대해 궁금합니다. [4]
1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...