"Openssl"의 두 판 사이의 차이

wwiki
이동: 둘러보기, 검색
(인증서 내용 확인)
(인증서와 개인키로 생성)
 
(같은 사용자의 중간 판 9개는 보이지 않습니다)
3번째 줄: 3번째 줄:
  
 
===비밀번호 제거===
 
===비밀번호 제거===
openssl rsa -in key.pem.orig -out key.pem
+
$ openssl rsa -in key.pem.orig -out key.pem
  
===개인키로 파일 암복호화===
+
===파일 암복호화===
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl;
 
  
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
+
==== 암호화 ====
 +
공개키로 암호화
 +
$ openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl;
 +
 
 +
$ echo -n "" | openssl rsautl -encrypt -in - -inkey id_rsa.pub.pem -pubin | openssl base64 -A
 +
 
 +
==== 복호화 ====
 +
개인키로 복호하
 +
$ openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
 +
 
 +
$ echo "" | openssl base64 -d | openssl rsautl -decrypt -inkey id_rsa
  
 
==공개키 생성==
 
==공개키 생성==
34번째 줄: 43번째 줄:
  
 
=====웹서버용 인증서=====
 
=====웹서버용 인증서=====
[[Let's Encrypt certificate]]
+
[[Let's Encrypt certificate]]  
 +
 
 +
=== 인증서 파일의 확장자 ===
 +
출처: https://ko.wikipedia.org/wiki/X.509
 +
 
 +
.CRT - CRT 암호화 된 인증서. 보통 개인키와 주는 파일
 +
 
 +
.CER - CER 암호화 된 인증서. 복수의 인증서도 가능.
 +
 
 +
.DER - DER 암호화 된 인증서.
 +
 
 +
.[[Openssl#PEM|PEM]]
 +
 
 +
.P7B - .p7c 참조.
 +
 
 +
.P7C - PKCS#7 서명 자료 구조(자료는 제외), 인증서이거나 CRL(복수도 가능).
 +
 
 +
.PFX - .p12 참조.
 +
 
 +
.P12 - PKCS#12, 공개 인증서와 암호로 보호되는 개인 키를 가질 수 있다(복수도 가능).
  
 
==pfx==
 
==pfx==
 +
MS에서 사용하는 personal information exchange syntax standard(개인정보 교환 구문 표준)인 pkcs12포맷의 확장자
  
 
===인증서와 개인키로 생성===
 
===인증서와 개인키로 생성===
 
crt(pem포맷의 인증서)와 key(pem포맷의 개인키)로부터 생성
 
crt(pem포맷의 인증서)와 key(pem포맷의 개인키)로부터 생성
 +
$ openssl pkcs12 -export -out pkcs12.pfx -inkey privkey.pem -in fullchain.pem
  
  openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
+
$ openssl pkcs12 -export -out pkcs12.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
  
 
===인증서로 생성===
 
===인증서로 생성===
53번째 줄: 83번째 줄:
 
==SSL/TLS client program==
 
==SSL/TLS client program==
 
  $ openssl s_client
 
  $ openssl s_client
  $ openssl s_client -showcerts -connect wiki.wnote.ga:443 -servername wiki.wnote.ga
+
  $ openssl s_client -showcerts -connect wiki.wnote.kr:443
 +
 
 +
== 키 포맷 ==
 +
'''PKCS'''(Public-Key Cryptography Standard)
 +
 
 +
=== RFC4716 ===
 +
The Secure Shell (SSH) Public Key File Format (https://www.ietf.org/rfc/rfc4716.txt)
 +
---- BEGIN SSH2 PUBLIC KEY ----
 +
ssh-keygen (Version: 1:8.4p1-5)에서 왜 이렇게 ...
 +
-----BEGIN OPENSSH PRIVATE KEY-----
 +
 
 +
=== PKCS8 ===
 +
Private-Key Information Syntax Specification(https://datatracker.ietf.org/doc/html/rfc5208)
 +
 
 +
공개키 암호에서 사용되는 비밀키 값에 대한 문법을 정의한다.
 +
 
 +
=== PEM ===
 +
Privacy Enhanced Mail
 +
 
 +
Textual Encodings of PKIX, PKCS, and CMS Structures(https://datatracker.ietf.org/doc/html/rfc7468)
 +
 
 +
Base64로 인코딩 된 데이터가 header와 footer 사이에 들어간다.
 +
 
 +
인증서 경우엔 다음과 같다.<syntaxhighlight lang="text">
 +
-----BEGIN CERTIFICATE-----
 +
base64로 인코딩된 데이터
 +
-----END CERTIFICATE-----
 +
</syntaxhighlight>PKCS #8 Private Key 는 https://datatracker.ietf.org/doc/html/rfc7468#section-10 에 정의되어 있다. <syntaxhighlight lang="text">
 +
-----BEGIN PRIVATE KEY-----
 +
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVcB/UNPxalR9zDYAjQIf
 +
jojUDiQuGnSJrFEEzZPT/92hRANCAASc7UJtgnF/abqWM60T3XNJEzBv5ez9TdwK
 +
H0M6xpM2q+53wmsN/eYLdgtjgBd3DBmHtPilCkiFICXyaA8z9LkJ
 +
-----END PRIVATE KEY-----
 +
</syntaxhighlight>
 +
 
 +
=== 포맷 변경 ===
 +
pem을 crt로 변경
 +
$ openssl x509 -in sample.pem -inform pem -out sample.crt
 +
pem 포맷 BEGIN RSA PUBLIC KEY  => BEGIN PUBLIC KEY
 +
$ openssl rsa -RSAPublicKey_in -in 파일명 -pubout -out 출력파일명
 +
[[분류:보안]]

2022년 11월 17일 (목) 04:12 기준 최신판

개인키 생성[편집 | 원본 편집]

genrsa -out private.key 1024

비밀번호 제거[편집 | 원본 편집]

$ openssl rsa -in key.pem.orig -out key.pem

파일 암복호화[편집 | 원본 편집]

암호화[편집 | 원본 편집]

공개키로 암호화

$ openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl;
$ echo -n "" | openssl rsautl -encrypt -in - -inkey id_rsa.pub.pem -pubin | openssl base64 -A

복호화[편집 | 원본 편집]

개인키로 복호하

$ openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
$ echo "" | openssl base64 -d | openssl rsautl -decrypt -inkey id_rsa

공개키 생성[편집 | 원본 편집]

openssl rsa -in private.key -out public.key -pubout -outform derwriting

PEM포맷으로 생성[편집 | 원본 편집]

openssl rsa -in private.key -out public.key -pubout

인증서[편집 | 원본 편집]

인증서 생성[편집 | 원본 편집]

private.key로 만든 인증서

일반적으로 윈도우에서 .crt파일로 생성하고 리눅스등에서 .pem으로 생성하기도 한다.

openssl req -new -x509 -days 365 -key private.key -out cert.crt -config C:\openssl\ssl\openssl.cnf

국가코드: KR

인증서의 내용[편집 | 원본 편집]

인증서는 pem포맷으로 윈도우의 경우 crt확장자를 인증서로 인식한다. 더블클릭하면 발급대상과 발급자가 있으며, 자세히를 보면 버전, 서명 알고리즘, 유효기간, 주체, 공개키 등이 있다.

인증서 내용 보기[편집 | 원본 편집]
$ openssl x509 -text -noout -in localhost.crt
웹서버용 인증서[편집 | 원본 편집]

Let's Encrypt certificate

인증서 파일의 확장자[편집 | 원본 편집]

출처: https://ko.wikipedia.org/wiki/X.509

.CRT - CRT 암호화 된 인증서. 보통 개인키와 주는 파일

.CER - CER 암호화 된 인증서. 복수의 인증서도 가능.

.DER - DER 암호화 된 인증서.

.PEM

.P7B - .p7c 참조.

.P7C - PKCS#7 서명 자료 구조(자료는 제외), 인증서이거나 CRL(복수도 가능).

.PFX - .p12 참조.

.P12 - PKCS#12, 공개 인증서와 암호로 보호되는 개인 키를 가질 수 있다(복수도 가능).

pfx[편집 | 원본 편집]

MS에서 사용하는 personal information exchange syntax standard(개인정보 교환 구문 표준)인 pkcs12포맷의 확장자

인증서와 개인키로 생성[편집 | 원본 편집]

crt(pem포맷의 인증서)와 key(pem포맷의 개인키)로부터 생성

$ openssl pkcs12 -export -out pkcs12.pfx -inkey privkey.pem -in fullchain.pem
$ openssl pkcs12 -export -out pkcs12.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

인증서로 생성[편집 | 원본 편집]

cer 인증서 생성

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

개인키 추출[편집 | 원본 편집]

$ openssl.exe pkcs12 -in my.pfx -nocerts -nodes -out private.key

SSL/TLS client program[편집 | 원본 편집]

$ openssl s_client
$ openssl s_client -showcerts -connect wiki.wnote.kr:443

키 포맷[편집 | 원본 편집]

PKCS(Public-Key Cryptography Standard)

RFC4716[편집 | 원본 편집]

The Secure Shell (SSH) Public Key File Format (https://www.ietf.org/rfc/rfc4716.txt)

---- BEGIN SSH2 PUBLIC KEY ----

ssh-keygen (Version: 1:8.4p1-5)에서 왜 이렇게 ...

-----BEGIN OPENSSH PRIVATE KEY-----

PKCS8[편집 | 원본 편집]

Private-Key Information Syntax Specification(https://datatracker.ietf.org/doc/html/rfc5208)

공개키 암호에서 사용되는 비밀키 값에 대한 문법을 정의한다.

PEM[편집 | 원본 편집]

Privacy Enhanced Mail

Textual Encodings of PKIX, PKCS, and CMS Structures(https://datatracker.ietf.org/doc/html/rfc7468)

Base64로 인코딩 된 데이터가 header와 footer 사이에 들어간다.

인증서 경우엔 다음과 같다.

-----BEGIN CERTIFICATE-----
base64로 인코딩된 데이터
-----END CERTIFICATE-----

PKCS #8 Private Key 는 https://datatracker.ietf.org/doc/html/rfc7468#section-10 에 정의되어 있다.

-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVcB/UNPxalR9zDYAjQIf
jojUDiQuGnSJrFEEzZPT/92hRANCAASc7UJtgnF/abqWM60T3XNJEzBv5ez9TdwK
H0M6xpM2q+53wmsN/eYLdgtjgBd3DBmHtPilCkiFICXyaA8z9LkJ
-----END PRIVATE KEY-----

포맷 변경[편집 | 원본 편집]

pem을 crt로 변경

$ openssl x509 -in sample.pem -inform pem -out sample.crt

pem 포맷 BEGIN RSA PUBLIC KEY => BEGIN PUBLIC KEY

$ openssl rsa -RSAPublicKey_in -in 파일명 -pubout -out 출력파일명