"Openssl"의 두 판 사이의 차이

wwiki
이동: 둘러보기, 검색
(인증서와 개인키로 생성)
 
(같은 사용자의 중간 판 17개는 보이지 않습니다)
1번째 줄: 1번째 줄:
== 개인키 생성 ==
+
==개인키 생성==
 
genrsa -out private.key 1024
 
genrsa -out private.key 1024
  
=== 비밀번호 제거 ===
+
===비밀번호 제거===
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
 +
 
 +
==공개키 생성==
 
openssl rsa -in private.key -out public.key -pubout -outform derwriting  
 
openssl rsa -in private.key -out public.key -pubout -outform derwriting  
  
=== PEM포맷으로 생성 ===
+
===PEM포맷으로 생성===
 
openssl rsa -in private.key -out public.key -pubout
 
openssl rsa -in private.key -out public.key -pubout
  
== 인증서 ==
+
==인증서==
 +
 
 +
===인증서 생성===
 +
private.key로 만든 인증서
  
=== 인증서 생성(crt) ===
+
일반적으로 윈도우에서 .crt파일로 생성하고 리눅스등에서 .pem으로 생성하기도 한다.  
private.key로 만든 인증서(crt)
 
  
 
openssl req -new -x509 -days 365 -key private.key -out cert.crt -config C:\openssl\ssl\openssl.cnf
 
openssl req -new -x509 -days 365 -key private.key -out cert.crt -config C:\openssl\ssl\openssl.cnf
25번째 줄: 36번째 줄:
 
국가코드: KR
 
국가코드: KR
  
=== 인증서의 내용 ===
+
===인증서의 내용===
 
인증서는 pem포맷으로 윈도우의 경우 crt확장자를 인증서로 인식한다. 더블클릭하면 발급대상과 발급자가 있으며, 자세히를 보면 버전, 서명 알고리즘, 유효기간, 주체, 공개키 등이 있다.
 
인증서는 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 암호화 된 인증서.
 +
 
 +
.[[Openssl#PEM|PEM]]
 +
 
 +
.P7B - .p7c 참조.
 +
 
 +
.P7C - PKCS#7 서명 자료 구조(자료는 제외), 인증서이거나 CRL(복수도 가능).
 +
 
 +
.PFX - .p12 참조.
  
== pfx ==
+
.P12 - PKCS#12, 공개 인증서와 암호로 보호되는 개인 키를 가질 수 있다(복수도 가능).
  
=== 인증서와 개인키로 생성 ===
+
==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
  
=== 인증서로 생성 ===
+
===인증서로 생성===
 
cer 인증서 생성
 
cer 인증서 생성
  
 
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
 
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
  
==== 개인키 추출: ====
+
====개인키 추출====
openssl.exe pkcs12 -in my.pfx -nocerts -nodes -out private.key
+
$ 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 사이에 들어간다.
 +
 
 +
인증서 경우엔 다음과 같다.<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 출력파일명