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

카테고리

분류 전체보기 (185)
끄적끄적 (6)
Server, Cloud (12)
Linux, Ubuntu (29)
개발개발 (47)
Mac, iOS (41)
Embedded (20)
NAS (1)
Web (5)
Network (3)
Review (12)
기타 (9)
비공개글 (0)
Total725,223
Today36
Yesterday211

0. 용어 정리

PKI (Public Key Infrastructure); 공개키 기반 구조

X.509: 공개키 인증서와 인증 알고리즘을 사용하기 위한 PKI 표준

PKCS (Public Key Cryptography Standards): Private Key를 저장하는 문법에 관한 표준
            PKCS#1, PKCS#8, PKCS#12 등을 사용

CRL (Certificate Revocation List), OCSP (Online Certificate Status Protocol): 인증서 유효성 점검을 위한 표준/방법

CA (Certificate Authority): 인증 기관

ASN.1 (Abstract Syntax Notation One): 추상 구문 기법, 네트웍상의 데이터 교환을 정의한 프로토콜

RSA (Rivest–Shamir–Adleman): 공개키 암호시스템의 하나

ECDSA (Elliptic Curve Digital Signature Algorithm): 타원곡선을 이용한 전자서명 알고리즘


0-2. 인코딩/파일 종류 정리

참고로 당연히 아래에 적는 확장자는 참고용으로 강제사항은 아님.
PEM 포맷의 개인키를 my.key.pem, my.key, key.pem 등등 저장하기 나름.

인코딩에 따른 구분

 종류

 확장자

 설명

 DER (Distinguished Encoding Representation)

 .der

 ASN.1을 표현하는 방식의 종류. (바이너리로 저장됨)

 PEM (Privacy Enhanced Mail)

 .pem

 Base64로 인코딩된 ASCII 텍스트
 (표준으로 더 자주 사용됨)


내용에 따른 구분

 종류

 확장자

 설명

 Private Key

 .key

 개인키

 Certificate

 .cer (Windows 주로 사용)
 .crt (*NIX 주로 사용)

 인증서

 PKCS #12

 .p12, .pfx

 하나의 파일에 개인키, 인증서 등을 같이 저장하는 방식에 대한 표준

 Certificate Signing Request

 .csr

 인증서 발급을 위해 내 개인키 서명을 CA에게 보내기 위한 파일

 Serial .srl

 CA가 인증서를 발급할 때 Serial 을 관리하기 위한 파일



1. OpenSSL 명령어

* 기본 config 경로: /etc/pki/tls/openssl.cnf

1) Private Key 생성

openssl genrsa -out key.pem 2048


[옵션]

-des, -seed, -aes256, ...: 해당하는 방식으로 키 암호화. 미사용시 암호화 X

-passout pass:PASSWORD: 키를 암호화할 경우 암호 지정. 미사용시 입력 프롬프트가 뜸

-f4 (0x10001), -3: E value 지정. 기본값: -f4

1024, 2048, 3072, 4096, ...: Private Key Bit 크기. 아래 부록 참고




2) CSR 생성

openssl req -new -key key.pem -out my.csr


[옵션]

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest. 기본값은 버전마다 다르고 적당히 sha256 사용.
            전체 목록은 openssl dgst -h

-subj: 인증서 주제 설정. 미사용시 입력 프롬프트 표시
    예시) -subj "/C=KR/O=sho/CN=SHO Certificate"

 필드

 의미

 예시

 /C=

 국가

 KR

 /ST=

 State, 한국이라면 시/도

 Seoul

 /L=

 Location

 Yongsan

 /O=

 Organization, 회사명

 회사

 /OU=

 Organization Unit, 부서명

 부서

 /CN=

 Common Name

 SHO Root CA, blog.ioate.kr 등




3) CSR로부터 인증서 생성

X.509 V3 확장 설정

(아래에서 사용할 ca.ext, end.ext 파일)

Web TLS 인증서 (CA용) - ca.ext

basicConstraints = critical, CA:TRUE
#basicConstraints = critical, CA:TRUE, pathlen:0

subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
keyUsage = cRLSign, keyCertSign


Web TLS 인증서 (End-entity, 사이트용) - end.ext

basicConstraints = critical, CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:blog.iolate.kr, IP:1.1.1.1


CA 인증서 생성

openssl x509 -req -days 365 -extfile ca.ext -signkey key.pem -in my.csr -out root.crt


[옵션]

-set_serial 1: 시리얼 값 지정. 미지정시 임의값 생성

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest.
            전체 목록은 openssl dgst -h
            직접 신뢰 설정을 하는 Root CA 가 아니라면, sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함


End-entity 인증서 생성

openssl x509 -req -days 365 -extfile end.ext -CA root.crt -CAcreateserial -CAkey my.key -in my.csr -out end.crt


[옵션]

-CAcreateserial: 시리얼 자동 지정 및 시리얼 파일 생성 (.srl)

-CAserial root.srl: CAcreateserial 로 한번 발급한 이후에는 이 옵션으로 시리얼 생성 파일 입력

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest. sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함



4) 생성된 파일 정보 확인

CSR

openssl req -noout -text -in my.csr

인증서

openssl x509 -noout -text -in end.crt



2. 부록

Private Key 비트 크기

출처: https://en.wikipedia.org/wiki/Key_size

(대략적 요약)

* 128bit AES가 충분한 보안 수준으로 고려되었지만, 양자 컴퓨터의 등장 후 비밀 문서에 256bit 사용 권고

* 1024bit RSA와 80bit 대칭키 /
   2048bit RSA와 112bit 대칭키 / 
   3072bit RSA와 128bit 대칭키 /
   15360bit RSA와 256bit 대칭키  가 서로 보안 수준이 비슷하다고 판단됨.

* 1024bit RSA는 2006~2010년에 취약해짐.
   2048bit RSA는 2030년까지 유효할 것으로 판단.
   2030년 이후에는 3072bit 사용 권고


3. 참고

Wikipedia, OpenSSL 문서, 등등...

(그때그때 정리해둔 문서를 다시 정리한거라 참고 URL이 없음..ㅠ)

Posted by iolate

댓글을 달아 주세요

Tibero DB 를 사용할 일이 있었는데, tbAdmin이 구려서 직접 연결해서 데이터를 가져와야할 일이 있었다.

심지어 마땅한 다른 언어를 사용할 수 없어서 Excel VBA로......


윈도우 기준으로 ODBC를 시스템에 등록하고, 해당 드라이브를 이용해서 연결하면 된다.


1. ODBC 등록

ODBC 설치법은 인터넷에 검색하면 많이 나오지만, 인스톨러를 사용해서 등록하라고 하는데,,, 왠지 마음에 안들어서 수동등록함.

우선 필요한 ODBC 파일은.. 검색하면 어디서 구할 수 있는지 잘 나온다. (tbAdmin 에는 없다., 서버를 소스코드(tar.gz)로 받았을 경우 client/win32/lib/libtbcli.dll, libtbcli.lib 에 있음)

.lib도 필요한지 아닌지 잘 모르겠지만 일단 이름이 같으니까 같이 챙겨서, 삭제되지 않을 적당한 곳에 잘 꽁쳐놓자.


이후 cmd를 관리자모드로 열어서 아래 명령어 입력. 드라이버 이름(Tibero 6)이나 경로는 필요에 따라 수정해주면 된다.

odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}
64bit 시스템이라면, 32bit 로 등록해야 한다.
%windir%\syswow64\odbcconf /A {INSTALLDRIVER "Tibero6|driver=D:\odbc\libtbcli.dll"}


2. Excel VBA 에서 연결

도구 - 참조 에서 Microsoft ActiveX Data Objects 6.0 Library 체크 후 확인한 후 아래 코드 참고해서 작성.

Driver={Tibero 6} 는 위에서 ODBC 등록시 사용한 드라이버 이름을 사용하면 된다.


Dim conn As New ADODB.Connection
conn.Open "Driver={Tibero6};Server=x.x.x.x;Port=xxxx;UID=user;Database=sid;Password=pwd;"

Dim rs as New ADODB.Recordset
rs.ActiveConnection = conn
rs.Open "SELECT * FROM table;"

Do Until (rs.EOF = True)
...
    rs.MoveNext
Loop

rs.Close


대충 이런식으로 사용.

이 후로는 다른 DB 사용할 때랑 비슷하다. 연결 문자열 정도만 참고하면 될 듯?

'개발개발' 카테고리의 다른 글

Excel VBA에서 ODBC(Tibero DB) 연결하기  (0) 2019.09.23
Posted by iolate

댓글을 달아 주세요

cloud9 을 사용하거나,, 뭐 여튼 필요할떄만 쓰는 aws 인스턴스의 경우엔 ip 주소를 매번 확인해줘야하는 번거로움이 추가된다.
따라서 부팅시에 Route 53 A레코드를 변경해주는 스크립트를 작성해보았음.

IAM 권한도 적절히 필요하겠지만, 난 cloud9 instance를 사용해서인지, aws가 알아서 credential 을 관리해줘서 생략.
필요하다면 아래 참고 글 링크를 확인해보자.

아래 파이썬 스크립트를 적절한 곳에 만들어 주고, 상단 변수 역시 설정해준다. 난 ~/route53/update.py 라고 만들었음.
특정 인스턴스의 public ip 를 구해온 다음, 지정한 url의 A레코드 값을 변경(없으면 생성)해주는 코드이다.
호스팅 영역 ID는 Route 53 에서 해당 도메인 이름(ex.com)을 선택하면 볼 수 있고, URL 은 호스팅 영역 내에서 생성하는 서브도메인을 포함한 이름(abc.ex.com)의 형태를 입력해주자.

INSTANCE_REGION="ap-southeast-1"
INSTANCE_ID="i-~~~~~~~~~~"
DOMAIN_ZONE="호스팅 영역 ID (ZGWP~~~~~~)"
URL="사용할 도메인 (abc.ex.com)"

import boto3

client_ec2 = boto3.client('ec2', region_name=INSTANCE_REGION)
r = client_ec2.describe_instances(InstanceIds=[INSTANCE_ID])

ip = r['Reservations'][0]['Instances'][0]['PublicIpAddress']

client_route53 = boto3.client('route53')
client_route53.change_resource_record_sets(
    HostedZoneId=DOMAIN_ZONE,
    ChangeBatch={'Changes': [{
        'Action': 'UPSERT',
        'ResourceRecordSet': {
            'Name': URL,
            'Type': 'A',
            'TTL': 300,
            'ResourceRecords': [{'Value': ip}]
        }
    }]}
)

그 다음 이 스크립트를 부팅시 실행되도록 설정한다. 여러가지 방법이 있지만 난 crontab을 이용하였음.

crontab -e

@reboot sleep 30 && /usr/bin/python3 /home/ec2-user/route53/update.py

경로 등은 알아서 수정해주자.
난 혹시 몰라서 30초 딜레이를 줬는데 안줘도 될 수도.

1번 테스트 해봤는데 일단 잘 된다. ㅎㅎ

참고
Auto-Register EC2 Instance in AWS Route 53

Posted by iolate

댓글을 달아 주세요

  1. 2019.10.01 14:36 Bhan  댓글주소  수정/삭제  댓글쓰기

    AWS EC2에 해놀 올릴 수 있나요? 혹시 가능한지 여부랑 성능 궁금해서 문의합니다.

    • 2019.10.05 13:07 신고 BlogIcon iolate  댓글주소  수정/삭제

      사용하시는 os에 따라서 조금 달라질 수는 있지만, 가능합니다.

      다만 IAM 유저 생성해서 credential 은 만들어 넣어주셔야 합니다

최근에 달린 댓글

최근에 받은 트랙백

글 보관함