Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 3개 있습니다.)

JetBrains Omea Reader에서 TLS 1.2 모드의 https 서버로부터 RSS 구독이 안 되는 경우 해결 방법

언젠가부터, Omea Reader로는 구독이 안 되는 RSS들이 나오기 시작했습니다. 일례로, "https://shinyoungjin.life/rss.xml" RSS의 경우 구독을 시도하면,

https_tls12_1.png

"The underlying connection was closed: An unexpected error occurred on a send." 오류가 발생했는데요, 예전에는 그냥... 뭔가 새로운 RSS 포맷에 대한 지원을 하지 못해서 그런가 보다 했는데요, 아래의 사건을 겪게 되면서,

C# - WebClient로 https 호출 시 "The request was aborted: Could not create SSL/TLS secure channel" 예외 발생
; https://www.sysnet.pe.kr/2/0/13233

어쩌면 Omea Reader도 내부에서 사용한 HttpWebRequest가 TLS 1.2 서버에 대한 통신 오류를 겪고 있는 것이 아닌가... 하는 의심이 들었습니다. 그리고 테스트를 해봤는데요, 방법은 간단합니다.

우선, 제 웹 사이트의 RSS는 정상적으로 Omea Reader가 읽어들이므로, sysnet.pe.kr에 페이지 하나를 추가해 다음과 같이 문제의 RSS 파일을 읽어 그대로 반환하는 코드를 작성한 후,

string url = "https://shinyoungjin.life/rss.xml";

WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
outputText = wc.DownloadString(url);

Response.Clear();
Response.ContentType = contentType;
Response.ContentEncoding = Encoding.UTF8;
Response.Write(outputText);
Response.End();

저 페이지 링크를 대상으로 Omea Reader에서 구독을 시도했더니 ^^ 정상적으로 됩니다. 즉, RSS 파일 내용에는 아무런 문제가 없었으며 https 서버의 문제였던 것입니다.




자, 그럼 원인을 알았으니 Omea Reader의 오류를 어떻게 고칠 수 있을까요?

우선, 해당 프로그램은 오픈 소스가 아니기 때문에 소스 코드를 수정할 수는 없습니다. 따라서 "ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;" 코드를 적용하는 방법은 선택할 수 없습니다.

그다음, app.config에 DontEnableSchUseStrongCrypto 옵션을 설정하는 것은 소스 코드 변경 없이도 가능하지만, 아쉽게도 Omea Reader 응용 프로그램은 .NET Framework 1.1로 만들어졌기 때문에 그 옵션 자체를 지원하지 않습니다. 현재 .NET Framework 1.1은 Windows 8 / Windows Server 2012 이후부터 사라졌는데요, 다행히 CLR 2.0에서 1.1에 대한 하위 호환을 유지하므로 .NET Framework 2.0 ~ 3.5가 설치된 PC에서는 여전히 Omea Reader를 실행할 수 있는 상태입니다.

그렇다면 supportedRuntime을 이용해 명시적으로 .NET 4+ 런타임으로 실행하도록 만들면 어떨까요?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup><supportedRuntime version="v4.0" /></startup>
    <runtime>
        <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
    </runtime>
</configuration>

그런 경우, Omea Reader가 참조한 DLL 중에서 (IL Only 유형이 아닌) "Mixed mode assembly"로 만들어진 것이 있어 실행 시 다음과 같은 예외가 발생합니다.

System.IO.FileLoadException: Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
   at iv.f()
   at JetBrains.Omea.MainFrame.u(Object A_0, EventArgs A_1)
   at System.Windows.Forms.Timer.OnTick(EventArgs e)
   at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

이로써 절망에 빠지는 순간... ^^; 오류 메시지의 "without additional configuration information." 문구가 눈에 들어왔습니다. 그렇다면, 부가 설정으로 저 상황을 해결할 수 있다는 건데요, 오호~~~ 검색으로 답을 찾았습니다. ^^

Mixed mode assembly is built against version 'v1.1.4322'
; https://stackoverflow.com/questions/4018924/mixed-mode-assembly-is-built-against-version-v1-1-4322

무려 12년 전의 Q&A가 이렇게 도움이 되는군요. ^^ 그래서 OmeaReader.exe.config을 다음과 같이 바꿔서,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
       <supportedRuntime version="v4.0" />
    </startup>

    <runtime>
        <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
    </runtime>
</configuration>

실행했더니 정상적으로 ^^ TLS 1.2 사이트에 대한 문제를 해결했습니다.

(이 방법 외에도, 레지스트리 설정을 통해 전역적으로 TLS 1.2(또는, 최신 버전의 보안 프로토콜)를 사용하게 만들어 해결하는 것도 가능합니다.)




혹시, 또 다른 해결책이 있을까요? 재미 삼아 차선책으로 역어셈블을 고려할 수 있습니다. 그런데, OmeaReader는 전체적으로 난독화 처리가 되었기 때문에 역어셈블 후 대상 소스 코드를 찾아 다시 컴파일 시키는 것이 쉽지 않다는 문제가 있습니다.

다른 방법이 없다면 그렇게라도 해야겠지만, 다행히 우리에게는 ^^ dnSpy가 있습니다. 그래서, 지난 글에 작성한 방법을 적용하면 되는데요,

dnSpy를 이용해 소스 코드가 없는 .NET 어셈블리의 코드를 변경하는 방법
; https://www.sysnet.pe.kr/2/0/13234

위의 글에서 적용한 "System.Windows.Forms.MessageBox.Show("Loaded");" 코드 대신 이번에는 "ServicePointManager.SecurityProtocol |= (SecurityProtocolType)0xC00;" 코드를 사용하면 됩니다.

그렇게 적용한 HTMLPlugin.dll을 기존 파일에 덮어쓴 다음 실행했더니,

omea_reader_tls12_support_1.png

위와 같이 TLS 1.2가 적용된 웹 서버로부터 정상적으로 RSS 파일을 읽어와 잘 보여주고 있습니다. ^^

(혹시 필요한 분들이 계실지 몰라, OmeaReader.exe.config 파일과 변경된 "HTMLPlugin.dll"을 첨부합니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/30/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
552정성태2/20/20242201Windows - 바탕화면에 검은 영역의 빈 공간을 삭제하는 방법
551정성태2/18/20242128DropBox - PermissionError: [WinError 5] Access is denied: 'C:\\Users\\...'
550정성태10/31/20232821윈도우 탐색기의 "새로 만들기" 메뉴에 "텍스트 문서" 항목이 없는 경우 - 두 번째 이야기
549정성태4/20/20234910youtube-dl을 파이썬으로 실행하는 방법
548정성태4/15/20234706Galaxy Buds2를 Windows에 연결한 경우 (Stereo가 아닌) Mono로 들리는 문제
547정성태1/28/20235350JetBrains Omea Reader에서 TLS 1.2 모드의 https 서버로부터 RSS 구독이 안 되는 경우 해결 방법파일 다운로드1
546정성태12/17/20226518blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버
545정성태11/29/20229533[종료] [2차] "시작하세요 C# 10" 서적 나눔합니다. (5권)
544정성태11/6/20225064Camtasia - "변경된" 볼륨을 일괄 설정하는 방법
543정성태11/4/202213756[종료] "시작하세요 C# 10" 서적 나눔합니다. (4권 한정)
542정성태6/8/20226864입력 포커스를 가져가는 응용 프로그램을 확인하는 방법 - FocusLogger
541정성태6/7/20225949특정 USB 장치가 인식이 안 되는 문제
540정성태5/25/20225752구글 검색 시 "ko-kr"이 아닌 "en-us"에 해당하는 자료 검색 방법
539정성태5/23/20225852문법에 맞지 않는 learn.microsoft.com의 C++ 소스 코드
538정성태5/18/20225988WACOM Intuos Pro PTH-660 사용 후기 (개발자 입장)
537정성태3/17/20226601eFriend Plus 설치 후 실행이 안 되는 문제가 발생한다면?
536정성태1/13/202283972021년 블로그 기부 수익 공개 ^^
535정성태11/25/202187232021년 새로운 PC
534정성태10/19/20219063파판14 - 에오르제아의 시간 알람을 위한 C# WinForms 응용 프로그램 [1]파일 다운로드1
533정성태10/6/202111405모바일 브라우저에서 "비공개 연결이 아닙니다." NET::ERR_CERT_AUTHORITY_INVALID 오류가 발생하는 현상 [1]
531정성태9/1/2021856316GB로도 모자란 근래의 개발 환경
530정성태7/27/20216887그동안 마이크로소프트 계정으로 가입한 웹 서비스 및 응용 프로그램을 알아내는 방법
529정성태7/18/20216912C:\$Windows.~BT 용도와 삭제하는 방법
528정성태7/17/20218684Logitech Webcam이 있는 경우, %LOCALAPPDATA%\temp\LWSDebugOut.txt 파일의 (무제한) 증가 현상
527정성태7/13/20216989Microsoft Edge의 뉴스 알림 창 끄는 방법
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...