일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 인증
- SwiftUI
- 애플
- MSYS2
- appres
- albumbook
- fido
- 앱리소스
- MYSQL
- MFA
- css
- apple
- OSX
- 앱스토어
- otpkey
- SSH
- 2FA
- openssl
- WebAuthn
- kmip
- Nodejs
- FIDO2
- Android
- Xcode
- git
- SWIFT
- 안드로이드
- 앨범북
- OTP
- SSL
- Today
- Total
인디노트
OpenSSL 자주 쓰는 명령어(command) 및 사용법, tip 정리 본문
OpenSSL 자주 쓰는 명령어(command) 및 사용법, tip 정리
https://www.lesstif.com/pages/viewpage.action?pageId=7635159
설치
RHEL/CentOS Linux 는 기본 패키지에 포함되어 있으므로 별도 설치 불필요. Windows 나 기타 Unix 에서 설치는 OpenSSL 컴파일(compile) & 빌드(build) 참고
X509Certificate 인증서
인증서 정보 보기
PEM 인코딩된 인증서를 파싱해서 정보를 출력
DER 인코딩일 경우 -inform der 옵션 추가
인코딩 변환
DER 인코딩된 인증서를 PEM 으로 변경
개인키(PrivateKey)
RSA 2048 키 생성 및 개인키를 AES256 으로 암호화
- 암호( pass phrase)는 asdfasdf 이며 입력창을 띄우지 않고 커맨드에서 바로 설정( -passout 옵션)
위에서 생성한 개인키 복호화하여 RSA Private Key 추출
pass phrase 와 암호화 알고리즘 변경
- 알고리즘: AES256 -> Triple DES
- Pass phrase : asdfasdf -> new-password
개인키(PrivateKey) pass phrase 해독
개인키의 pass phrase 가 있을 경우 웹 서버 재구동시마다 개인키 암호를 입력해야 하므로 문제가 생길때 대응이 어렵게 된다.
pass phrase 가 걸린 원본 파일(localhost.key) 을 복사한 후에 다음 명령어로 해독
개인키(PrivateKey) pass phrase 설정
암호화되지 않은 개인키에 AES128 로 pass phrase 설정
암호화되지 않은 개인키에 Triple DES로 pass phrase 설정
pkcs#8 방식의 개인키 해독
Private-Key Information Syntax Specification 방식으로 암호화된 RSA PrivateKey 를 해독하는 방법
pkcs#8 로 변환
개인키의 pass phrase 를 PKCS#8 형식으로 변환
- -topk8 : output PKCS8 file
- -v2 aes128 : PKCS#5 Ver 2.0 사용 및 aes128 사용
HTTPS 연결의 인증서 디버깅
HTTPS 디버깅(httpd 의 SSLCertificateChainFile, SSLCACertificateFile 정상 설정 여부 확인등)이나 curl 등의 ca bundle 에 등록하기 위한 목적으로 서버가 사용하는 SSL 인증서를 추출할 경우 아래 명령어 사용
- http://steveliles.github.io/android_ssl_certificate_not_trusted.html
- Java 의 keystore에 SSL/TLS Server 인증서를 import 하는 방법#AlphaSSL일때
CMS (PKCS#7, S/MIME)
cms(Cryptographic Message Syntax) 명령어는 S/MIME v3.1 mail 이나 PKCS#7 형식의 데이타를 처리하는 명령어로 주요 옵션은 다음과 같다.
- -verify : 전자서명 검증 수행
- -in : 검증할 전자서명 데이타 파일
- -certfile : 검증에 사용할 인증서 파일(전자 서명 데이타내에 인증서가 없을 경우 필요 - 생성시 -nocerts 으로 생성했을 경우)
- -out : 검증후 원본을 저장할 파일명
- -content : 검증에 사용할 원본 파일
- -CAfile : 인증서 발급 체인(CA 인증서 묶음. PEM 형식으로 연접해서 작성해 주면 되며 예제는 curl 에 포함된 ca인증서 번들 파일 참고 - /etc/pki/tls/certs/ca-bundle.crt)
signeddata 검증
DER 로 인코딩된 cms signed-data 형식인 inputfile 을 검증하고 원본을 content 라는 파일로 저장.
인증서 체인 지정
signed-data 안에 인증서 체인이 없을 경우 다음과 같은 에러가 발생한다.
CA 인증서를 PEM 형식의 파일(Ex: ca-file) 으로 만든 후에 -CAfile file 옵션을 추가하면 검증시 사용할 CA 인증서를 지정해 줄 수 있다.
detached signeddata 검증
서명에 사용된 컨텐츠가 CMS Signed Data 내에 없거나 또는 있어도 강제로 외부 파일을 사용할 경우 -content file 옵션으로 파일을 지정하면 된다.
signeddata 생성
PEM 형식으로 된 인증서와 개인키를 사용하여 전자 서명 데이타 생성
- -sign : 전자 서명 데이타 생성
- -in : 전자서명할 원본 데이타
- -nodetach: 전자서명 데이타에 원본 첨부
- -nosmimecap:
- -noattr: 전자서명 데이타에 어떤 signed attributes 도 포함하지 않음.
envelop data 생성
CMS envelopedData data 생성(대칭키를 생성후 원본을 암호화한 후에 상대방 인증서의 공개키로 대칭키를 암호한 데이타 형식)
-encrypt: encrypt 데이타 생성
-in : 암호화할 원본 데이타
- -aes256 : AES256 으로 암호화(-aes128, -seed, -camellia128 등의 알고리즘 사용 가능)
-recip: 데이타를 수신할 상대방의 인증서(이 안에 있는 공개키로 암호화하므로 상대방 인증서를 정확히 넣어주어야 함)
envelop data 해독
- -decrypt : 1123
- -in : 해독할 enveloped data 파일
- -inform : 파일의 포맷. 기본값은 PEM 이며 der 인코딩되었을 경우 der 추가
- -inkey: 복호화할 개인키
-decrypt 시 -out 옵션이 통하지 않으므로 > 로 원본 파일을 저장해야 함
openssl cms -decrypt -in enveloped-data.ber -inform der -inkey kmpri.pem > contents
PKCS#12
Check a Certificate Signing Request (CSR) - PKCS#10
pkcs12 생성
p12 파일 생성
- -export : PKCS#12 파일 생성
- -in : p12 에 들어갈 인증서
- -inkey: 포함시킬 개인키
- -out : 생성될 p12 파일명
- -name: 첨부 그림처럼 friendlyName 에 들어갈 이름이며 Java 에서 KeyStore 로 접근시 alias 항목이 되므로 필수로 입력해야 한다. openssl 은 입력되지 않았을 경우 인증서의 해시값을 설정하는 것 같다.
- -descert : p12 내 인증서 항목을 Triple DES 로 암호화(기본값 RC2-40) - 인증서는 공개하는 용도이므로 크게 의미 없는 옵션
- -des3 : encrypt private keys with triple DES (default)
- -aes128 : 개인키를 AES128 로 암호화(권장)
- -keypbe alg: specify private key PBE algorithm (default 3DES)
기타 인증서를 포함하여 p12 생성
-certfile : 포함시킬 추가 인증서
Check a PKCS#12 file (.pfx or .p12)
print some info about pkcs#12 file.
Parse a PKCS#12 file and output it to a file:
Don't encrypt the private key:
OCSP
인증서는 PEM 형식이어야 함.
OCSPRequest 생성
lesstif.cer 인증서를 검증하기 위한 OCSPRequest 를 생성하여 파일(ocsp-req.ber)로 저장. -issuer 옵션에는 인증기관 인증서를 입력
ocsp 로 인증서 검증
위에서 생성한 OCSPRequest 를 읽어서 -url 로 지정된 OCSP 서버에서 인증서 검증 요청
검증할 인증서를 읽어서 검증 요청
ocsp asn 파싱
-reqin 으로 지정된 파일로부터 OCSPRequest 형식의 데이타를 읽어서 출력
TSA(Time Stamp Authority)
ts 생성
ASN1Parse
- https://www.openssl.org/docs/manmaster/apps/asn1parse.html
- https://www.openssl.org/docs/manmaster/crypto/ASN1_generate_v3.html
UTF8String 생성
UTF8String 을 생성해서 utf8string.der 파일로 저장
UTF8String file 로 부터 파싱
생성된 ASN1 파일로 부터 파싱
UTCTime 생성
UTCTime 파싱
OctetString 생성
확인 필요
"Hello World" 라는 문자열을 Octet string 으로 생성해서 octetstring.der 로 저장
contents 라는 파일을 octet string 으로 생성하여 octetstring.der 로 저장
알고리즘 속도 측정
openssl speed 명령어로 측정 가능
다음은 aes-128-cbc 와 rsa 2014 를 비교하는 명령
같이 보기
- OpenSSL 로 ROOT CA 생성 및 SSL 인증서 발급
- apache httpd 에 SSL/HTTPS 적용 및 VirtualHost 에 SNI(Server Name Indication) 문제 해결
- OpenSSL 컴파일(compile) & 빌드(build)
Ref
- http://wiki.openssl.org/index.php/Command_Line_Utilities
- http://techglimpse.com/linux-openss-toolkit-example-commands/
- https://www.madboa.com/geek/openssl/
- https://www.mkssoftware.com/docs/man1/openssl_pkcs8.1.asp