블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (166)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (25)
개발질 (45)
Mac (18)
iOS (23)
IoT (16)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (7)
비공개글 (0)
Total623,007
Today126
Yesterday146

12년도에 쓴 [우분투 openVPN 설치/설정법] 의 연장선으로.. Ubuntu 18.04 에서 OpenVPN 을 설치하고자 했다.


설치법 자체는 

DigitalOcean - How To Set Up an OpenVPN Server on Ubuntu 18.04


이런데 잘 나와있는데, 나는 인증서 생성을 EasyRSA 를 이용하고 싶지 않았음.


그래서 맥의 키체인을 이용해보았다.


1. CA 생성

2. Server 용 인증서 생성

3. Client 용 인증서 생성

4. 인증서 / 키 변환





키체인 접근 앱을 연 다음에 상단 메뉴를 통해 이렇게 접근하자.

CA 생성은 "인증 기관 생성...", 그 외 인증서는 "인증서 생성..." 을 이용하면 된다.


1. CA 생성



이름은 적당히 하고 유형을 "자체 서명 루트 CA"로 하자.

사용자 인증서는 별로 영향이 없는 것 같고 왜 있는지 모르겠지만 일단 VPN 서버로 설정하였고,

"기본값 덮어쓰기"를 꼭 체크 후 계속.


이후 유효기간을 적당히 설정하고 "초대장 서명" 은 체크해제하고 계속.

인증서 정보도 메일과 이름 외에 비워둬도 되니 적당히 입력하고 넘어간다.

키 쌍 정보 역시 그대로 진행.



키 사용 확장자(KUE, 작업)와 확장된 키 사용 확장자(EKU, 목적)를 묻는데, CA 생성시에는 "이 CA에 대한" 과 "이 CA의 사용자에 대한" 으로 두번 묻는다.

무슨 차이인지 잘 모르겠지만, 나는 감으로

"이 CA에 대한" KUE 와 "이 CA의 사용자에 대한" EKU 를 위 사진과 같이 설정하고 나머지 두개는 포함하지 않음 체크하고 진행하였다.

"이 확장자는 중요합니다." 의 경우 난 체크를 했는데 안해도 되는 듯...? 잘 모르겠다.


기본 제한 확장자나 대체 이름 확장자는 포함하지 않은 것 같고 진행진행!

신뢰 설정은 하지 않아도 된다.


완료하면, 인증서, 공개 키, 개인 키 3개가 생성되는데, 인증서만 우클릭 하여 .cer 포맷으로 내보내기 해두자.

2. Server 용 인증서 생성


이번엔 "인증서 생성..." 으로 진행.

이름을 적당히 설정하고 신원 유형은 "리프" 로 한다. 스샷에 VPN 클라이언트로 되어 있는데 VPN 서버가 맞다. 다만 앞에서 말했듯 상관없는 듯?

마찬가지로 기본값 덮어쓰기를 꼭 체크하고 넘어가자.


그 다음 발급자 선택 에서 앞에서 만든 CA 를 선택하고 계속


키 사용 확장자(KUE)는 서명, 키 암호화

확장된 키 사용 확장자(EKU)는 SSL 서버 인증 을 선택한다.


이 후 제목 대체 이름 확장자에서 DNSName 이나 IPAddress 중 하나 이상 입력해주고 진행. 아무거나 적어도 상관..은 없는 것 같지만 난 VPN 서버의 호스트 주소를 적어주었다.


그럼 서버용 인증서도 생성 완료!

얘도 마찬가지로 인증서, 공개 키, 개인 키 3개가 만들어지는데 이번엔 인증서와 개인 키 두개를 각각 .cer, .p12 확장자로 내보내기를 해두자.

3. Client 용 인증서 생성

서버와 비슷하지만 이렇게 진행하면 된다.


서버 인증서와 동일하게 인증서와 개인 키를 추출한다.


4. 인증서 / 키 변환

인증서 확장자인 .cer 은 .crt 로,

개인 키 확장자인 .p12 은 .key 로 변환이 필요하다.


각각 터미널에서 아래 명령어를 통해 변환 가능. 파일 이름은 알아서 바꿔주자.


$ openssl x509 -inform DER -in filename.cer -out filename.crt

$ openssl pkcs12  -nodes -nocerts -in filename.p12 -out filename.key


인증서의 정보를 보고 싶다면

$ openssl x509 -in ca.crt -noout -text


생성된 인증서들을 바탕으로 원래 OpenVPN 설치 / 설정 과정에 맞춰 집어 넣으면 된다.

ca.crt, server.crt, server.key, client.crt, client.key

이렇게 5개가 생성되면 정상.


dh2048.pem 과 ta.key 는 우분투에서 그냥 바로 만들 수 있는데,


$ openssl dhparam -out dh2048.pem 2048

$ openvpn --genkey --secret ta.key

명령어를 통해 만들 수 있다.


Posted by iolate

망할 MS는 unicode 를 기본지원하지는 못할망정 호환지원도 제대로 못한다.


utf-8 csv의 경우에, Excel 로 바로 열면 한글이 모두 깨져버리는데,

데이터 불러오기 등의 번거로운 방법을 통해 불러오더라도 깨지는 X같은 경우가 발생한다.


나도 웬만하면 cp949로 인코딩을 굳이 해줄텐데,, 웹에서 javascript 로 데이터를 생성하고 바로 내려받는지라,

어떻게 방법이 없이 MS에 대한 저주만 한가득 하고 있었는데....


-------------------------------------------


UTF-8 BOM 을 통해 (반틈만) 해결하였다.


방법은, 파일의 가장 앞에 \xef\xbb\xbf 혹은 \ufeff 을 넣어주면 된다.

이제 Excel 에서 바로 열어도 한글이 깨지지 않는다.


나의 경우엔

'data:application/csv;charset=utf-8,'+encodeURIComponent(csv)

'data:application/csv;charset=utf-8,\ufeff'+encodeURIComponent(csv)

이렇게 바꿔주었다.


다만, Excel 이 아닌 다른 프로그램으로 열거나 직접 csv파일을 읽어와서 작동시킬때 문제가 생길 수도 있는데....

이건 MS 를 욕하자.


-------------------------------------------


MS 는 IE(+Edge)와 CP949(euc-kr)를 하루빨리 없애버렸으면 좋겠다.



참고


UTF-8 인코딩에서의 BOM(Byte Order Mark) 문제 :: wystan's tales


https://stackoverflow.com/questions/17879198/adding-utf-8-bom-to-string-blob

Posted by iolate

결론부터 말하자면 그냥 우분투에 3.6을 깔자..

다만 그 과정은 다른 상황에서 적용할 수 있을테니 남겨둠.


----------


Ubuntu 서버들은 파이썬 버전이 3.4(14.04) 혹은 3.5(16.04) 이고, 3.6 을 설치하긴 귀찮았다.

마침 맥의 파이썬이 3.6이길래 zappa 설치를 시도했는데, 의존성 설치에서 fail. 언제나 그렇듯 인코딩 문제...


의존성에 있는 kappa 라이브러리의 패키지 정보에 넣기 위한 README 파일을 제대로 읽어오지 못하는 거였고,

tree 구조를 표현하는 문자가 문제였음.


builtins.open 함수에서 encoding 을 지정해주지 않으면 기본값은 locale.getpreferredencoding(False) 을 사용하고,

이 문자열이 우분투에서는 UTF-8 이였지만, 맥에서는 US-ASCII 였다.


기본값을 어떻게 바꿔줘야하나 찾아보다가, 잘 안나오고 귀찮아서 소스코드를 받아 설치하는 방법으로 진행했다.


$ git clone https://github.com/garnaat/kappa

$ cd kappa


zappa 는 kappa (=0.6.0) 을 의존성으로 가지니

$ git checkout 0.6.0


$ vi setup.py

14     return open(os.path.join(os.path.dirname(__file__), fname), encoding='utf-8')


$ sudo pip3 install -e .


이렇게 한 후에 다시 zappa 설치를 진행하면 끗!


다만, 이후에도 비슷한 문제가 생기고 어차피 zappa 는 virtualenv 환경을 필요로한다.

그냥 우분투에 가상환경으로 3.6을 만들어두고 하자...

Posted by iolate

매번 검색하기 귀찮아서 작성함

그냥 UNetbootin 을 사용하는것도 괜찮은 선택지인 것 같다.


디스크 목록 보기

$ diskutil list


디스크 추출

$ diskutil unmountDisk /dev/disk#


ISO -> IMG

$ hdiutil convert -format UDRW -o ~/path/to/output.img /path/to/input.iso

$ mv /path/to/output.img.dmg /path/to/output.img


Flashing image

$ sudo dd if=/path/to/output.img of=/dev/rdisk# bs=8m


압축된 이미지 Flashing

$ gunzip -c /path/to/image.gz | sudo dd of=/dev/rdisk# bs=8m



bs 는 한번에 작업할 block size. 1m 을 쓰라고 하는 곳도 있는데.. 뭐 상관없겠지


dd 작업 중간에 Ctrl+T 를 누르면 작업상황을 확인할 수 있다.

Posted by iolate

난 직접 서버에서 최신버전을 갱신하는 식으로 해야할 줄 알았는데...

apple 에서 json 으로 결과를 뱉어주는게 있다.. 씐기..


잊어먹을까봐 적어둠.


http://itunes.apple.com/lookup?bundleId=[bundleIdentification]


으로 쿼리를 보내면 스크린샷 이미지, 장르, 버전 등의 앱정보를 JSON 으로 반환해준다.

이를 읽으면 됨.


아래 출처에 코드도 있음.



출처:

http://stackoverflow.com/questions/6256748/check-if-my-app-has-a-new-version-on-appstore

Posted by iolate

Apple 개발자 페이지에서 App ID 등록 및 Push 인증서 발급까지 끝낸 이 후.


0. 개발용 인증서 등록

잘 까먹는 과정 중 하나라서..

Push 서비스를 이용하려면 개발용 인증서 새로 발급해야 한다. 와일드카드 ㄴㄴ

발급 후 다운받을 수 있는 .mobileprovision 파일을 실행 후

프로젝트 Build Settings -> Code Signing Identity 에서 해당 인증서 선택


==========


1. .cer 파일을 실행해서 키체인에 등록

2. 키체인 - 인증서 카테고리 에서 인증서 찾아서 (앱아이디로 검색)


3. 왼쪽 접힌걸 열어서 인증서와 개인키를 같이 선택, 우클릭 -> 2개 항목 보내기

ㄴ 정확한건 아니지만, sandbox 용은 개인키와 함께, production 용은 인증서만 선택해서 추출해야 작동을 하는 것 같다.

원래 잘 되던게 언제부턴가 이러던데, 정확한 원인이나 이유는 잘 모르겠음.


4. .p12 포맷으로 적당한 곳에 저장. 비밀번호는 설정안해도 된다.

5. $ openssl pkcs12 -in cert.p12 -out cert.pem -nodes

6. 위에서 비밀번호를 지정했다면 해당 비밀번호를, 아니라면 그냥 엔터

7. 완성

Posted by iolate
TAG APNS, ios, p12, pem, Push

SMS API 를 연동하면서, 보낼 문자의 길이를 EUC-KR 인코딩에 맞게 카운트할 필요가 있었다.


단순히 EUC-KR 로 인코딩해서 카운트len(string.encode('euc-kr'))해도 되긴 하지만, "뷁" 같이 EUC-KR 테이블에 없는 문자는 ? 로 치환 후 계산이 필요했음.


즉, 내가 원하는건

1. EUC-KR 에 없는 문자는 ?로 치환하고

2. EUC-KR 인코딩에 맞게 글자수 카운트

를 Python 2.7 에서!


PHP 코드 및 원리는 http://dev.epiloum.net/293 여기에 나와있으며, CP949 / EUC-KR 차이 등에 대해 상세히 잘 설명되어 있다.



길이 자체는 위에 말한듯이 euc-kr 로 인코딩 후 카운트하면 되니 상관없고, 지원하지 않는 문자열을 ?로 만드는 과정이 필요.

utf-8 로 인코딩된 문자열이 입력으로 들어오는 기준으로 작성되었다.


대충 만든거니 대충보고 쓰자...


FUNC: convert_euc_kr

INPUT: content (utf-8)


더보기 (Python 2.7)



기반 코드들을 Python 3 으로 마이그레이션함에 따라, 이 코드도 수정이 필요하였다.

에러가 나지 않게 타입(str, byte)부분만 바꿔줘서 제대로 작동이 되는지는 확인해보지 않았다.


더보기 (Python 3)



리턴값은 여전히 utf-8 로 인코딩 되어 있으니, 길이를 구할때는 len(ncontent.encode('euc-kr')) 로 하면 됨.


끝.

Posted by iolate

맥에선 brew 로 잘 깔았던 것 같은데..

우분투에선 apt 로 받으니 버전이 낮다.


여튼 맥이고 우분투고 환경변수 설정 문제도 있으니 써둠.



Mac 일 경우

$ brew install go



Ubuntu 일 경우

1. https://golang.org/dl/ 에서 해당하는 파일을 다운로드

2. $ sudo tar -C /usr/local -xzf go*******.tar.gz

3. 환경변수 추가(/etc/.profile 혹은 ~/.profile)

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin


일단 이렇게까지 하면 설치 및 사용은 잘 된다.


GOPATH 설정

그런데 go get 등을 하려면 GOPATH 를 설정하라고 하면서 안됨.

찾아보니 그냥 다운받는 패키지를 저장하는 장소를 지정해달라는 것. 설치 디렉토리는 여러 이유로 안됨.(권한, 업데이트 등등)

나는 그냥 ~/golang/pkg 로 지정하였다.

export GOPATH=~/golang/pkg


이러면 go get 등도 잘 됨


go install 을 할 경우 $GOPATH/bin 에 생긴다.




참고:

http://munchpress.com/install-golang-1-5-on-ubuntu/

Posted by iolate

망할 윈도우... BMP 쓰기가 너무 싫어 몇시간을 삽질했다..


GDI+ 를 사용하므로 

gdiplus.lib 

를 프로젝트 속성 - Linker - Input - Additional Dependencies 에 넣어주고


#include <gdiplus.h>

using namespace Gdiplus;


를 코드 상단에 적어주자.



더보기



위 코드로 

HBITMAP hBitmap = LoadPNGToHBITMAP(MAKEINTRESOURCE(IDB_PNG));

와 같이 이미지를 불러온 후에


WM_PAINT 메세지에서 아래 더보기와 같이 그려주면 된다.

사이즈는 원래 구하는 코드가 있었는데, 난 필요없어서 제거함. 그정도는 구글링하자.(후에 내 자신을 원망하겠지..)


더보기



* VS 2015 에서 VS 2010 의 컴파일러를 사용하여, Win XP SP3 및 Win 7 SP1 에서의 작동을 확인하였다.


Posted by iolate
TAG GDI+, jpg, PNG, winapi

뭐.. 다들 한번씩 겪는 것 같은데, 리모트 푸시의 Token 을 제대로 못 받아오는 문제..


Target Provisioning Profile 에서 push 용으로 받은거 잘 골라주고,

iOS8 에서 변경된 푸시 등록 방법을 사용하면 잘되야 정상이다. (각각 방법은 알아서 찾아보기.)


Push 세팅을 리셋해주고 다시 하니까 잘 되던데,

Apple 에선

1. 앱을 지우고

2. 재부팅을 하고

3. 날짜를 하루 당겼다가 돌아오고

4. 재부팅


이라고 안내하는데, 난 이게 귀찮아서,,, 탈옥폰의 장점은 이게 아니겠는가!


/var/mobile/Library/BackBoard/applicationState.plist

에서 해당 앱과 관련된 키를 지워버리고 BackBoard 를 재시작 한다.


$ killall backboardd


그리고 다시 앱을 시작하면 푸시 권한을 다시 물어보고, 허용해주면 잘 됨!

Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함