SSL nego 중 서버가 클라이언트로 인증서(certificate)를 주게 된다.

서버나 클라이언트에서 인증서를 확보하지 않고 패킷 덤프에서 추출하는 방법을 기술한다.


1. wireshark로 SSL 패킷 덤프를 연다.

2. TCP 프로토콜 설정에서 "Allow subdissector to reassemble TCP streams" 옵션을 켠다.

3. SSL handshake 중 "Certificate" 가 포함된 패킷을 연다.

4. packet detail 부분에서 SSL protocol을 확장

5. "Certificate" TLS record 확장

6. "cettificate" handshake protocol 확장

7. certificates list 확장. 첫번째 certificate가 서버의 것이고 뒤에 오는 certificate은 CA 및 root CA의 것이다. certificate chaining 참조

8. 첫번째 certificate에다 오른쪽 클릭.

9. "Export selected packet bytes..." 선택. 

10. 이름 적고 세이브


여기까지 진행하면, DER format의 certificate가 추출된다.


human readable하게 바꾸기 위해서는 openssl 명령을 이용한다.


>> openssl x509 -inform der -in <파일명> -text (-onout)


많이 쓰는 PEM 방식으로 저장하려면,


>>  openssl x509 -inform der -in <파일명> -out <파일명.pem>


참고로 der과 pem은 인코딩 방식이며, 특히 pem은 ascii(base64)로 표현됨. '-- BEGIN' 으로 시작

crt, cer, key 확장자는 각각 다음과 같다.


* crt: certificate의 확장자. der 또는 pem 으로 인코딩 된다.

* cer: crt의 alterate form이며 MS convention. IE에서 인식.

* key: private 또는 public key의 확장자. crt와 마찬가지로 der 또는 pem으로 인코딩 된다.



# ref.


1. https://www.wireshark.org/lists/wireshark-users/201003/msg00080.html ; wireshark로 certificate 추출

2. http://www.sslshopper.com/article-most-common-openssl-commands.html ; der -> pem 변환 방법

3. https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them ; der, pem 등 인증서 형식 비교

3-1. http://www.gtopia.org/blog/2010/02/der-vs-crt-vs-cer-vs-pem-certificates/ ; 3.의 original

'IT > network' 카테고리의 다른 글

IP broadcast 와 Mac broadcast  (0) 2014.04.03
Dynamic ARP Inspection  (0) 2009.11.23

linux는 빠르고 효율적인 통신을 위해 다양한 socket option을 개발/소개하고 있다.

(물론 이러한 option이 linux에만 있는 것은 아니지만.)


이 글은 이러한 옵션을 찾을 때마다 추가 정리하여 관리하겠다.


1. TCP_NOPUSH

2. TCP_NODELAY

3. TCP_CORK

4. TCP_DEFFERED_ACCEPT

5. 

.bashrc와 .bash_profile은 구성과 용법에서 비슷해 구별이 어려운데, 다음과 같은 내용을 찾아서 기록해 둔다.


* .bash_profile : login 시 bash shell이 지정된 경우 한번 실행됨

* .bashrc : bash shell이 뜰 때마다 실행됨. 기본적으로 child shell은 parent shell의 속성을 공유하므로 path등은 여기에 둘 필요 없음.


요는 login시에 한번 실행되느냐, shell 생성시마다 실행되느냐.


reference는 https://kldp.org/node/38265


끝.

broadcast : refers to a method of transferring a message to all recipients simultaneously.


wikipedia의 정의에 따르면 위와 같다.

(http://en.wikipedia.org/wiki/Broadcasting_(networking))


매우 간단 명료하다. 그런데, 여기에 IP와 Mac 이란 prefix가 붙는다면?


IP broadcast : subnet에 속한 모든 device들에 전달될 수 있는 주소

Mac broadcast : 특별히 스위치(L2)에게 전달 가능한 모든 포트로 패킷을 전파하게 하는 주소


같은 broadcast이지만, layer에 따라 각각 다른 역할이다.


더 쉽게 풀면, 스위치(L2)와 호스트들이 서로 연결된 상태에서 broadcast 패킷이 각 호스트에 

전달되기 위해서는


1. 먼저 스위치(L2)가 이 패킷이 broadcast 패킷임을 알아차리고, 모든 포트에 flooding하는 동작과

2. 각 포트를 통해 호스트로 전달된 패킷이 broadcast 패킷이므로 자신의 주소가 아니더라도 수신


하는 동작이 연결되어야 한다.


# IP broadcast 중 255.255.255.255는 local broadcast로 자기 subnet을 벗어나지 않는 broadcast이다.


reference는 http://www.lammle.com/discussion/archive/index.php/t-1607.html


끝.


'IT > network' 카테고리의 다른 글

wireshark로 패킷 덤프에서 인증서(certificate) 추출하기  (0) 2014.07.01
Dynamic ARP Inspection  (0) 2009.11.23

오랜만의 포스팅입니다.


회사에서 개발 도구의 하나로 git을 사용하는데, 남들은 GUI 형태의 멋진 툴들을 많이도 사용다더만 저는 옛날 사람인지 터미널에서 텍스트로 내리는 명령이 좋더라고요.


git log를 이용해서 이전 개발 이력을 많이 보는데, 


<pre>

git log --graph --decorate --pretty=oneline --abbrev-commit

</pre>


명령으로 graphical하게 보는 것을 좋하합니다.


이 때, commit에 tag가 많이 붙거나 커밋 로그가 긴 경우 윗 줄이 밀리는 현상을 발견하셨을 겁니다.

이 증상에 대한 해결 방법을 간략히 남기고자 합니다.


먼저, git log는 output을 다루기 위해 less를 사용하고 있습니다.

이 부분은 git config에서 core.pager로 설정할 수 있고요.

대부분의 linux 배포판에서 less의 옵션으로 '-r'을 사용하고 있는데, 이 부분을 '-R'로 바꾸어 줍니다.


<pre>

# echo $LESS

-r

# export LESS=-R

</pre>


다시 git log -- 를 실행해 보면, 이번에는 첫줄이 잘 나오는 것을 볼 수 있습니다만, 한글이 깨질 겁니다.

한글이 다시 나오도록 하는 방법은 LESSCHARSET을 'utf-8'로 설정하는 겁니다. 'euc-kr' 사용시에는

해당하지 않습니다만, 대부분의 배포판이 utf-8이지 싶습니다.


<pre>

# export LESSCHAR='utf-8'

</pre>


이제 끝났습니다.


매번 LESS와 LESSCHAR을 입력할 수 없으니


~/.bashrc 에 LESS와 LESSCHAR을 설정하고 종료합니다.


즐거운 개발 되시길 바랍니다.


# 참고 url


http://stackoverflow.com/questions/6983305/how-to-fix-git-log-output-missing-lines-in-less

http://divvun.no/doc/tools/utf-8-setup.html



저는 1.80KT 펌웨어에서 테스트했습니다. 개인적 용도와 목적으로 사용된 것이며 제가 인지하지 못한 저작권 문제가 발생하는 경우 글을 삭제하겠습니다. 혹여 아래 글을 보시고 따라 하시다가 문제가 생겨도 저는 책임을 지지 않으니 잘 판단하시기 바랍니다. 스토리가 워낙 내구성도 약하고 민감한 기계라고 하고 문제 발생시 A/S건 역시 힘드니만큼 사용자 개개인의 판단이 중요합니다.

잘 아시다시피 storyW는 olleh bookcafe 전용 기계라 다른 story 기계에서 가능한 기능(교보문고에서 구축한 도서관 - ebookcase 사용 - 에서 대출한 책 보기)이 지원되지 않고 있죠?

또한, 펌웨어 버전도 storyW 기준 1.80KT 즉 1.80의 KT향 버전으로 다른 story 기계(최신 1.88)와 다릅니다.

저도 포기하고 살던 차에 http://cafe.naver.com/ebook/126181 게시글을 보게 되었고요.
참고 문서인 http://openinkpot.org/wiki/Device/Story/RunArbitraryCode 에 따르면 임의의 명령을 root 권한으로 실행 가능하다고 합니다.
거기서 영감을 받아

"펌웨어 전체를 교체하기 보다 pdf를 실행하는 파일을 교체해 보자"

는 생각이 들게 되었습니다.

위 글에서 나온 참고 문서 http://vanderwijk.info/tags/hacking-e-reader-linux-hardware 에서 대략적인 story의 펌웨어 구조를 확인하고 제 storyW를 마루타삼아 가능성을 확인해 보았습니다.

http://cafe.naver.com/ebook/114774 에 보시면, 1.88 펌웨어에서 개선된 패치 펌웨어가 있습니다. 이 패치 펌웨어를 기반으로 작업을 진행했습니다.

참고 문서에 따르면 story 펌웨어는 zip으로 압축된 파일에 128B 헤더를 붙여 배포하는 것으로 보입니다. 분석에 따르면, 이 헤더를 제외하면 일반적인 zip 파일과 동일하다는 것이고 여기서 패치에 사용된 파일을 추출할 수 있습니다. (압축 파일에 암호가 걸려 있는데, 이 암호는 참고 사이트에서도 공개하지 않는 바 저도 공개하지 않겠습니다.)

압축 해제된 파일은 2개로 adoberm.feb와 tmp_comic.kbg 인데, 1.80KT 펌웨어에서 파일 구조를 받아 살펴본 바 adoberm.feb가 pdf 파일을 재생하는 실행 파일임을 추측할 수 있습니다. 따라서 이 파일을 교체시 별 문제가 없다면 교보문고 지원 pdf를 읽을 수 있다는 결론입니다.

다만, 이 실행 파일을 교체시 기존 olleh ebook에서 구입한 책을 읽을 수 있는가가 관건인데, 이 부분은 뒤에서 살펴보도록 하겠습니다.

http://cafe.naver.com/ebook/126181 에서 바탕화면 이미지를 교체하듯이 패치된 실행파일을 기존 디렉토리에 복사하는 방식으로 파일을 교체하였습니다. (만일을 대비하여 1.80KT 버전의 adoberm.feb는 SD카드에 복사하여 저장합니다.)

파일을 교체했으니 대출된 책이 읽히는지 확인합니다.

기존 펌웨어로는 ebookcase에서 stowyW로 복사한 파일이 열리지 않고 에러가 뜹니다만, 실행 파일을 교체한 후 잘 열리는 것을 확인할 수 있었습니다. 또한, 우려했던 사항인 olleh bookcafe에서 구입한 책도 잘 실행되는데 이 부분은 아무래도 epub와 pdf를 실행하는 파일이 달라서 문제가 안 된 것인지도 모릅니다. 또한 기존 adobe drm을 가진 파일의 실행도 무난히 잘 되었습니다. (첨부 사진 참조)

다만, 대출한 책 초반에 배경 이미지가 포함된 페이지를 여는 경우, 매우 긴 시간이 소요됩니다. 이 부분은 story EDU나 BASIC에서 동일한 지 확인이 필요합니다.

그럼 스크린샷 몇 장 첨부하며 글을 마칩니다.

01234567



# 이걸 펌웨어 해킹? 교체? 뭐라고 해야 할지 모르겠지만, 개인 사용에 있어 법적 문제가 없는지 또는 사용법 배포에 문제가 없는지 의문입니다. 이 문제가 해결되면 파일 교체에 사용된 상세 설정과 실행 파일을 공개하도록 하겠습니다.

# 이 글 공개 이후, iriver에서 파일 교체 가능한 위 방법을 막을 수도 있습니다. 물론 펌웨어 업그레이드를 해 줘야 가능한 얘기가 되겠습니다. ^^ 관계자의 빠른 펌웨어 업그레이드를 촉구합니다. ^^
요 몇주간 애플과 어도비 이슈를 지켜보면서 드는 생각을 내가 쓰는 것보다 더 잘 정리해 준 글이 있어 감상을
덧붙이고자 한다.

내 주된 관심사는 애플과 어도비 사이의 냉기류에도 있지만, 일부 이 사안을 바라보는 사람들에게도 있다.

찬반 양론이 팽팽한 가운데 있고, 때로는 민감하게 반응하는 이들도 있어 말하기가 조심스럽긴 하지만,
사견이니 큰 문제는 없을 것 같아 설을 풀어 본다.

(저는 찬성하는 입장이지만, 제가 아래에서 풀어볼 찬성측의 주된 이유로 찬성하는 것은 아닙니다.
찬성의 입장에 대해 반대하시는 분들에게는 제 글이 불쾌한 글이 될 수도 있으므로 스킵을 권합니다.)

찬반 양론에 서 있는 사람들은 각각 자신의 이익에 찬동하는 방향에 서 있다.
뭐 당연한 얘기이긴 하겠다. 내게 이익이 되지 않는 주장을 할 이유따위 없잖겠는가?
그런데, 조금 더 바라보아야 할 것이 다음 분류이다.

대체로 소비자(애플의 소비자이든 기존 데스크탑 환경의 플래쉬 소비자이든)의 입장에 가까운 사람들은 애플의
결정에 찬동하고, 개발자(애플이든 플래쉬이든, 심지어 전혀 관련 없을 것 같이 보이는 안드로이드 개발자들도!)의
입장에 가까운 사람들은 애플의 이 같은 결정에 반발한다는 것이다.

물론 내 주변의 협소한 네트워크에서 관찰한 결과이기 때문에 분석이 틀릴 가능성이 농후한 점 인정한다. 그런데,
이러한 관찰의 결과를 쉽게 내버리지 못하고 내 주장으로 갈음하는 점은 각 찬반의 결과로 인한 영향이 소비자와
개발자에게 서로 다르다는 내 추측 때문이다.

애플이 플래쉬를 거부하는데 찬동하는 사람들은 대부분 소비자의 입장을 견지하고 있다고 했다. 찬성하는 대부분의
이유가

1. 플래쉬는 품질 편차가 너무 커서 안정적이지 못 하다. -> 사용자의 관점
2. 플래쉬는 리소스 잠식이 심해 배터리 소모가 빠를 것이다. -> 사용자의 관점
3. 플래쉬는 터치 기반의 UX에 최적화되지 않았다. -> 사용자의 관점

위와 같다는 것이다. 이 중 몇가지는 애플 또는 jobs가 주장하는 바와 크게 다르지 않다.

이에 반해 같은 이슈에 대해 반대하는 사람들의 입장은

a. 플래쉬도 아이폰 또는 모바일 환경에 맞게 진화할 수 있다.
b. 플래쉬든 앱이든 사용자가 선택가능하도록 오픈해 두어야 한다.

첫번째, 모바일 환경에 맞게 진화할 수 있다는 발상은 그 자체로 아직까지는 소비자의 관점에서 쓸 이유가 없다는 말이
된다. 스마트폰이 아직까지도 얼리 어댑터만의 전유물이라면 모르겠으되 이미 대중화가 진행되고 있는 시점에서는
소비자가 불편함을 감수할 이유가 없는 것이다.

두번째, 사용자의 선택에 맞겨 두어야 한다는 주장에 대해서도 소비자는 다음과 같이 생각할 것이다.
소비자는 사용상의 불편함이 없다면, 기존의 것에 대한 호감도가 새로운 것에 대한 것보다 높은 편이라고 본다.
적어도 기존의 것이 심각한 불편함을 초래하지 않는 한 사용자는 새로운 것이 아니라고 하더라도 잘 견디며 쓴다는
것이다. 있던 것이 없어졌으면 모르겠으되, 애초에 제공하지 않던 것들을 계속 제공하지 않는다고 하여 특별히 불만을
가지는 사용자는 별로 없다는 얘기다.

사실, 위의 두가지 이유는 개발자의 입장에서 견지하는 반대의 이유는 아닐 것이다. 나는 개발자가 애플의 정책에 대해
반감을 가지는 이유를 다음과 같이 생각한다.

c. '현업에 종사하는 플래쉬 개발자나 자바 또는 다른 언어로 앱스토어에 진입하려던 개발자에게 진입 장벽이 생겼기
때문이다' 라고...

숱하게 돌을 던지는 소리가 들린다마는 얘기를 꺼낸 김에 마져 끝내야 겠다.
결국 사용자 입장에서 플래쉬를 쓰건 쓰지 않건 개발자의 입장에서는 크게 다르지 않다고 생각한다. 플래쉬를 이용하여
앱을 제작하도록 도우는 CA (computer aided) 툴(?)을 어도비가 만들었고, 그걸 플래쉬 전문 개발자들이 사용하면
되는 것이었기 때문이다. 그런데 플래쉬로 개발된 프로그램을을 포함하여 그 외에 다른 언어로 개발된 프로그램들을
쉽게 포팅하여 앱으로 제작할 계획을 세우고 있던 수많은 개발자에게 애플이 뒤통수를 쳤기 때문에 그것도 아주 세게
쳤기 때문에 격렬한 반대를 쏟아 놓는 것 아니냐고..

이렇게 분석하는 본인도 개발을 하고 있는 사람이고, 언젠가 모바일 앱을 개발하며 먹고 살아야 할지도 모르는데,
왜 제 살을 깍아 먹는지 의아해 하는 사람이 있을지도 모르겠지만, 나는 개발자이면서도 애플의 입장을 찬성하는
쪽이다. 왜냐하면, CA 툴들로 인해 대다수 개발자들이 개발을 쉽게 하게 되었고, 창의적인 아이디어에 더 신경을
쓰게 되었던 점은 긍적적이지만, 반면 개발 시장의 진입 장벽을 낮추는 결과가 발생했고 그에 따라 시장에의 공급이
과잉하여 개발자에 대한 대우가 공급에 반비례하여 낮아졌다고 보기 때문이다.

의사들과 비교해 보면 제일 쉬울 꺼 같은데, 의사는 외과/내과를 동시에 마스터하기가 쉽지 않지만 아니 거의 없지만,
IT 특히 소프트웨어 개발쪽에서는 어떤 분야든 어떤 언어든 쉽게 습득하고 시장에 진입하는 경우가 허다하다는 것이다.
결국 이러한 경계의 파괴가 우리 스스로 우리의 가격을/ 대우를/ 지위를/ 낮추는 데 일조했다고 본다.
물론, 의사의 경우 환자의 생명을 담보하는 그래서 전문성이 어느 곳보다 우선시되어야 하는 직업이기 때문에 그렇다고
강변할 수 있다.
그런데 소프트웨어는 생명을 담보하지는 않더라도 진짜 전문성을 우선시하면 안되는 것일까?
항상 납기에 시달리고, 요구 사항 변경에 허덕이고, 개발사가 개발사를 부려 먹고(턴 키 방식) 그래야 하는 것일까?
의사와 같이 전문성을 인정하고 믿고 환자를 맡기듯 맡길 수는 없는 것일까?

그 첫번째 시도로 스스로 경계를 허물고 경쟁에 내 몰리는 CA 툴과 같은 전문성을 향상시키지 못 하는 환경을 고치는
것이 되면 좋지 않을까 하는 생각 때문에 애플의 의도와는 전혀 상관 없이 애플의 결정에 찬성하는 것이다.

어설픈 논리로 찬성의 변을 밝혔지만, 내 의견을 차치하고라도
결국 애플이든 어도비이든 찬성의 소비자이든 반대의 개발자(라고 글쓴이 본인만 생각할지도 모르는)이든 결국은
모두 자신의 이익에 따라 찬반의 주장을 하는 것이다. 따라서 선악의 개념은 여기에 적용하기 쉽지 않다. 라고 생각한다.

개인적인 생각.. 답글은 사양합니다. 상처받기 싫어요 ㅎㅎ

+ Recent posts