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

안녕하세요

개인서버에 우분투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분
후기 감사합니다. ^^ 이런 피드백 너무 좋습니다.
정성태

... 46  47  48  49  50  51  52  53  54  55  56  57  58  [59]  60  ...
NoWriterDateCnt.TitleFile(s)
1151황기동6/5/201311606무선 패킷 전송관련 질문 [1]
1147이진권6/2/201311644c# 윈폼 facebook과 연동2 [1]
1144황은영5/29/201316118원격지 서버에서 COM+ 호출이 되지 않습니다. [7]
1143김선희5/28/201317011윈도우 8, 익스플로러 10, 64bit->32bit [1]
1142백지훈5/15/201311417음성인식 TTS 관련해서 질문드립니다 ㅜㅜ [2]파일 다운로드1
1141나그네5/10/201311525안녕하세요..전자세금 관련하여.. 보다보다 여기까지 왔습니다. [4]
1140이성환5/8/201311719제네릭과 배열 관련 기초 질문입니다. [11]
1139양영석5/3/201310272페이스북 로그인 관련하여.... [1]
1137김민현4/30/201310303Binary 구조체에 대한 Linq query 관련 질문입니다. [3]파일 다운로드1
1136박상영4/25/201311164ksc5601에서 지원하지않는 확장문자 찾는방법 [3]
1135sequ...4/16/201326754c# dll c++ 에서 사용하기 (event 사용) [17]
1134이성환4/12/201310981volatile 키워드 관련 질문입니다. [3]파일 다운로드1
1133서광석4/8/201314165vb.net 2010에서 배포시 문제점 확인 방법에 대한 질문드립니다 [1]
1131헤딩3/28/201316450IIS 처리 성능을 높이고 싶으면 풀의 proecss 수를 계속 늘리면 될까요? [1]
1130박재율3/27/201310761WCF 서비스가 종종 죽는데 도움좀 부탁드립니다 ㅠ [1]
1129이상민3/21/201315135안녕하세요...IE Embedded Smart Client가 Windows8에서 정상동작을 하지 않습니다. [8]
1125박홍균3/19/20139312안녕하십니까. visual studio 에서 TFS 접속 관련으로 궁금한 점 여쭤봅니다.
1124궁금이3/18/201312326IIS 서버 이중화 구성시 데이터 베이스 트랜잭션 관리에 관해서... [1]
1127궁금이3/19/20139745    답변글 [답변]: IIS 서버 이중화 구성시 데이터 베이스 트랜잭션 관리에 관해서...(정성태님 봐주세요)
1122김시현3/11/201311160 Xamarin 에 관련하여 질문드립니다. [4]
1121롬메달2/14/201311261Assembly.Load로 얻은 객체안에서 제3의 어셈블리를 참조할때의 문제입니다. [8]
1120Lyn2/12/201310769안녕하세요. 블로그에 기술관련글을 꾸준히 포스팅 하실 수 있는 원동력이 궁금합니다. [1]
1119박진영2/4/201334265닷넷 DLL 실행 에러 (보호된 메모리를 읽거나 쓰려고 했습니다..) [2]파일 다운로드1
1118C#조으다1/29/201312303공유기 관리 페이지에 접근시 윈도우 인증창이 뜹니다. [4]
1117최윤호1/28/201310096답변주셔서 감사합니다 질문의 요지는 그게 아니고 [1]파일 다운로드1
1116C#조으다1/27/201317317비프음을 컴퓨터 내장 스피커로 출력하려면.. [2]
... 46  47  48  49  50  51  52  53  54  55  56  57  58  [59]  60  ...