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

안녕하세요

개인서버에 우분투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)
787궁금이2/2/200915522TFS 관련하여 질문드리고자 합니다. [2]
786맨날맑음1/30/200916741WPF를 SmartClient로 배포할순 없을까요? [2]
785정성우12/16/200815711Vista 환경에서 VB6로 개발한 어플리케이션이 IE 통해서는 런칭이 안됩니다.. [4]
783서광원11/20/200816411.NET 어셈블리를 COM에서 사용하도록 변경 했을때 배포는 어떻게 해야 하나요? [3]
782김용환10/14/200816849웹서비스에서 캐시를 사용하고 싶습니다. [3]
781이수정9/5/200814950visual studio 2008 관련 질문입니다. [2]
776신현창8/5/200815202VS2005로 실행시 갑자기 COM+ 등록이 안됩니다. [1]
775땡초7/21/200815499조언을 구하고저 합니다. [2]
774남호진7/19/200816412Visual Studio 2005나 2008에서 서버탐색기에연결된 데이터에서 정보를 끌어... [2]
773지워니7/17/200818182웹서비스로 db2의 데이터가 오질 않아요. [1]
984이영구7/16/201118130    답변글 [답변]: 웹서비스로 db2의 데이터가 오질 않아요.
772다자래7/15/200815745스레드와 이벤트를 이용해서 mssql 서버의 저장프로시져의 레코드 진행률을 표현하는 프로그래스바를 구현하려고하는데....막막 [1]
771guest6/26/200815510[WCF] Self host 만드는 방법. [2]파일 다운로드1
770조조5/27/200815143스마트클라이언트에서 stand-alone 형태를 임베디드형태로 변환시 문제.. [1]
769제영한5/20/200815500배포프로젝트에 대한 조언을 구합니다. [2]
767김형중5/6/200816298RMclock 관련 문의 입니다. [1]
766정성태4/28/200817249[데브피아 Q&A 모음] 2008-04-21 ~ 2008-04-24
764정성태4/21/200818017[데브피아 Q&A 모음] 2008-04-14 ~ 2008-04-18 [2]
763단테4/17/200815509COM 객체 생성하는 방법
765정성태4/21/200816208    답변글 [답변]: CreateInstance를 부르시는 것이 추천됩니다.
762이민지4/16/200819265ClickOnce 실행 시 Internet Explorer 7.0에서 에러 메세지 출력 [1]
761이민지4/16/200815879ClickOnce로 배포를 하다가 생긴 문제에 대해 질문드립니다. [1]
760한귀순4/15/200816757DataSet 의 designer.cs [2]
759정성태4/14/200817152[데브피아 Q&A 모음] 2008-04-04 ~ 2008-04-12
7573/28/2008147062008 Server, Vista 에서 RDS 지원? [4]
756손승휘3/24/200818626Microsoft Web Browser OCX 부분이 안전하지 않는 ACTIVEX로 IE에서 인식되어는 점 [1]
... 61  62  63  64  65  66  67  68  69  70  [71]  72  73  74  75  ...