현재 위치 - 회사기업대전 - 중국 기업 정보 - OpenSSL 자세한 설명

OpenSSL 자세한 설명

OpenSSL을 처음 접하는 사람들에게 가장 어려운 점은 아마도 다양한 개념을 먼저 이해하는 일일 것입니다.

공개키/개인키/서명/서명확인/암호화/복호화/비대칭암호

우리의 일반적인 암호화는 암호를 사용하여 파일을 암호화한 다음 동일한 암호를 사용하여 해독하는 것입니다. 이것은 이해하기 쉽습니다. 일부 암호화에서는 암호화에 하나의 암호가 사용됩니다. 암호를 해독하는 데 다른 암호가 사용됩니다. 이는 암호화와 암호 해독에 대한 암호가 다르다는 것을 의미합니다. 실제로 이것은 원리의 적용입니다. 수학에서 소수의 곱을 인수분해하는 방법을 이해해야 한다면 Baidu에는 읽어야 할 정보가 많이 있습니다. 결과적으로 이 세트의 키 중 하나는 데이터를 암호화하는 데 사용되고 다른 키는 해독하는 데 사용될 수 있습니다. 예, 공개 키와 개인 키를 모두 사용하여 암호화할 수 있습니다. 반대로 데이터는 다른 키로 해독됩니다. 개인키는 데이터를 암호화하는데, 공개키 복호화를 일반적으로 서명, 확인서명이라고 합니다.

공개키로 암호화된 데이터는 해당 개인키로만 복호화할 수 있으므로 공개키를 다른 사람에게 줄 수 있습니다. 이 데이터는 개인 키를 가지고 있는 사용자에게만 도달할 수 있으며, 유용한 데이터로 해독될 수 있으며, 다른 사람들도 동일한 방식으로 내용을 이해할 수 있습니다. , 개인 키를 사용하여 데이터에 서명하면 페어링된 공개 키만 데이터를 해독할 수 있습니다. 이 개인 키를 사용하면 키를 가진 유일한 사람이므로 페어링된 공개 키로 데이터를 잠금 해제할 수 있다는 의미입니다. 반대로, 이를 서명이라고 합니다.

실제 응용에서는 일반적으로 상대방과 공개 키를 교환한 다음 원하는 데이터를 전송합니다. 상대방이 상대방의 공개 키를 사용하여 암호화한 후 상대방이 자신의 개인 키를 사용하여 귀하에게 보내려는 데이터가 귀하의 공개 키로 암호화됩니다. 해독하여 최대한의 보안을 보장합니다.

RSA/DSA/SHA/MD5

비대칭 암호화 알고리즘에는 여러 가지가 있으며 가장 유명한 것은 RSA/DSA입니다. 차이점은 RSA가 할 수 있다는 것입니다. 암호화/복호화 및 서명 확인에 사용되며, DSA는 서명에만 사용할 수 있습니다. SHA의 경우에는 암호화, 복호화 또는 서명에 사용되지 않으며 요약 알고리즘이라고 합니다. 이는 데이터 내용을 기반으로 고정 길이 요약을 생성하는 알고리즘을 사용합니다. 이 요약 값 문자열은 원본 데이터와 해당 관계를 갖습니다. 즉, 원본 데이터는 이 요약을 생성하지만 이 요약은 복원할 수 없습니다. 원본 데이터는 음... 일반적인 상황에서는 이렇습니다. 이 알고리즘의 기능은 원본 데이터를 조금만 수정하면 생성된 요약이 달라지며 원본 데이터를 제공한다는 것입니다. 전송 과정에서 또 다른 요약을 제공하겠습니다. 얻은 원본 데이터에 대해 동일한 다이제스트 알고리즘을 수행하면 전송 과정에서 데이터가 수정되었는지 알 수 있습니다. .

실제 적용 프로세스, 암호화해야 하는 데이터가 매우 클 수 있고 암호화에 시간이 많이 걸리고 힘들기 때문에 일반적으로 원본 데이터를 먼저 소화한 다음 다이제스트 값을 암호화합니다. , 원본 데이터의 일반 텍스트와 암호화된 다이제스트 값이 함께 전송됩니다. 이러한 방식으로 암호화된 다이제스트 값을 해독하고 얻은 데이터의 다이제스트 값과 비교하여 데이터에 암호화된 다이제스트 값이 있는지 확인할 수 있습니다. 게다가 개인 키는 본인만이 가지고 있기 때문에 다이제스트 값을 복호화할 수 있으므로 다른 사람이 원본 데이터를 수정하여 가짜 다이제스트를 생성하더라도 복호화할 수 없습니다.

CA/PEM/DER/X509/PKCS

일반 공개 키는 일반 텍스트로 다른 사람에게 전송되지 않습니다. 이 파일이 생성된 공개키 파일이며, 이 파일은 암호화를 위해 다른 사람에게 넘겨질 수 있지만, 전송 과정에서 누군가가 악의적으로 귀하의 공개키를 파기하고 이를 자신의 공개키로 대체한 경우, 이를 획득한 당사자는 공개 키는 데이터를 암호화하는데, 자신의 키를 사용하여 데이터를 해독하고 볼 수는 없나요? 이 문제를 해결하려면 공증인이 이 작업을 수행해야 하며, 누구나 공개 키를 발급한 사람을 확인할 수 있습니다. CA가 공개 키를 확인하는 원리도 매우 간단합니다. 자신의 공개 키를 모든 사람에게 공개하고, 공개 키를 공개하려는 사람은 자신의 공개 키와 일부 신원 정보를 CA에 보낼 수 있습니다. CA. CA는 서명이라고도 하는 자체 키를 사용하여 암호화합니다. 여기에는 공개 키가 포함되며 정보 파일은 인증서 파일이라고 할 수 있습니다.

이런 방식으로 일부 공개키 파일을 얻은 모든 사람은 CA의 공개키를 통해 파일을 복호화하게 되는데, 정상적으로 복호화된다면 암호화하는 당사자는 CA만 될 수 있고 다른 사람은 이를 갖고 있지 않기 때문에 내부의 기밀정보는 반드시 사실이어야 한다. . 이 방법으로 공개 키 파일을 잠금 해제하고 내부 정보를 확인하여 이것이 암호화에 사용해야 하는 공개 키인지 확인할 수 있습니다.

실제 애플리케이션에서는 대부분의 사람들이 CA는 비용을 청구하므로 서명을 진행하므로 자체 서명된 인증서 파일을 직접 만들 수 있습니다. 즉, 직접 키 쌍을 생성한 다음 생성한 다른 키 쌍을 사용하여 인증서 쌍에 서명할 수 있습니다. 키입니다. 서명 인증서가 꼭 필요한 사람에게만 사용됩니다. 일반적인 데이터 암호화 및 복호화에는 공개 키와 개인 키만 사용하면 됩니다.

OpenSSL에서 생성되는 유일한 키 파일 형식은 PEM 및 DER입니다. . 두 가지 형식이 있는데, PEM은 base64 인코딩을 사용하여 키를 표현하는데, 직접 열면 영문자의 문자열을 볼 수 있고, DER 형식은 바이너리 키 파일로 볼 수 있습니다. ...당신은 아무것도 이해할 수 없습니다!.

== End blogs.com/phpinfo/archive/2013/08/09/3246376.html ==

순서대로 이해를 돕기 위해 다음과 같이 그림을 그렸습니다.

openssl을 사용하여 인증서 생성(openssl 세부 정보 포함)

1. openssl 소개

openssl은 현재 SSL/TLS 프로토콜 구현을 지원하는 강력하고 모든 기능을 갖춘 범용 도구 모음을 제공하는 가장 널리 사용되는 SSL 암호화 라이브러리 도구입니다.

공식 웹사이트: pany) [Default Company Ltd]:SunFoBank

조직 단위 이름(예: 섹션) []:IT Dept

일반 이름(예: SunFoBank) , 귀하의 이름 또는 귀하의 서버 호스트 이름) []:sunfobank.com

이메일 주소 [] :admin@sunfobank.com

[root@szxjdwins01-web-27 cert]# ll

총 8개

-rw-r--r--.1 루트 루트 1452 6월 22일 14:29 cert.crt

-rw-r- - r--.1 루트 루트 1708 6월 22일 14:29 rsa_private.key

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 36500 -out cert.crt -subj " /C=CN/ST=GuangDong/L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com "

openssl req -new -x509 - 일 36500 -key rsa_private.key -out cert.crt

4. 서버 인증서 발급을 위한 서버 서명 요청 파일 및 CA 서명 생성()

추가하지 않는 것이 좋습니다. server.key에 비밀번호를 추가하면 nginx를 다시 시작할 때마다 비밀번호가 필요하므로 효율성에 영향을 미칩니다.

nginx 구성에는 server.key와 server.crt라는 두 개의 파일만 필요합니다.

openssl genrsa -aes256 -passout pass:111111 -out server.key 2048

openssl req -new -key server.key -out server.csr

[root@szxjdwins01-web-27 cert]# openssl genrsa -aes256 -passout pass:111111 -out server.key 2048

RSA 개인 키 생성, 2048비트 길이 모듈러스

. ................................++++

.......+++

e는 65537(0x10001)

[root@szxjdwins01-web-27 cert]# openssl genrsa -aes256 -out server.key 2048

RSA 개인 키 생성, 2048비트 길이 모듈러스

................................. ...+++<피> .......................................... ........ ................++++

e는 65537(0x10001)입니다.

서버의 암호 문구를 입력하세요. 키: 111111비밀번호를 입력하세요 수동으로

확인 중 - server.key에 대한 암호 문구 입력: 111111비밀번호를 수동으로 입력하세요

[root@szxelab01-web-27 cert]# openssl req -new -key server.key - out server.csr

server.key에 대한 암호 문구를 입력하세요:

인증서 요청에 통합될 정보를 입력하라는 메시지가 곧 나타납니다

.

입력하려는 항목은 고유 이름 또는 DN입니다.

필드가 꽤 많지만 일부는 비워 둘 수 있습니다.

일부 입력란에는 기본값이 있습니다.

'.'를 입력하면 입력란이 공백으로 남게 됩니다.

국가명(2자리 문자 코드) [XX]: CN

주 또는 도 이름(전체 이름) []:GuangDong

지역 이름(예: 도시) [기본 도시]:ShenZhen

Organiza

이름(예: 회사) [Default Company Ltd]:SunFoBank

조직 단위 이름(예: 섹션) []:IT 부서

일반 이름(예: 이름 또는 서버의 호스트 이름) []:sunfobank.com

이메일 주소 [] :admin@sunfobank.com

다음 '추가' 속성을 입력하십시오

인증서 요청과 함께 전송됨

챌린지 비밀번호 []: 비밀번호를 입력하지 마세요.

선택적인 회사 이름 []: 비밀번호를 입력하지 마세요

이후 , 비밀번호와 서버를 입력하세요. 인증서 정보가 완료되었습니다. 명령줄에서 다양한 매개변수를 지정할 수도 있습니다.

openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GuangDong/ L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com "

*** csr 서명 이때 생성된 요청 파일은 CA에 제출하여 처리할 수 있습니다. Issue***

cat server.csr

-----BEGIN CERTIFICATE REQUEST----

Base64EncodedData

-----인증서 요청 종료------

openssl req -noout -text -in server.csr

openssl x509 -req -days 365000 -in server.csr -CA cert.crt -CAkey rsa_private.key -passin pass:111111 -CAcreateserial -out server.crt

[root@szxelab01-web-27 cert]# openssl x509 -req -days 365000 -in server .csr -CA cert.crt -CAkey rsa_private.key -passin pass:111111 -CAcreateserial -out server.crt

서명 확인

subject=/C=CN/ST=GuangDong /L=ShenZhen/O=SunFoBank/OU=IT Dept/CN= sunfobank.com/emailAddress=admin@sunfobank.com

CA 비공개 가져오기 CAxxx 옵션이 사용된 키

CA 매개변수 입력 지정

[root@szxelab01-web-27 cert]# ll

총 24

-rw-r--r--.1 루트 루트 1452

6월 22일 14:29 cert.crt

-rw-r--r--.1 루트 루트 6월 22일 15:07 cert.srl

-rw-r-- r--.1 루트 루트 1708 6월 22일 14:29 rsa_private.key

-rw-r--r--.1 루트 루트 1334 6월 22일 15:07 server.crt

-rw-r--r--.1 루트 루트 1070 6월 22일 15:04 server.csr

-rw-r--r--.1 루트 루트 1766 6월 22일 14:54 server.key

이때 nginx에서 모든 작업을 실행하려면 server.key의 비밀번호를 입력하라는 메시지가 표시되어야 합니다.

[root@szxelab01-web-27 nginx]# /application/nginx/sbin/nginx -t

PEM 암호 문구 입력: 비밀번호 111111 입력

nginx: 구성 파일 /application/nginx-1.12.2//conf/nginx.conf 구문은 괜찮습니다

예를 들어 비밀번호를 입력하지 않으면 암호화된 server.key를 변환해야 합니다. 암호화되지 않은 server.key에

[root@szxelab01-web-27 cert]# openssl rsa -in server.key -passin pass:111111 -out server.key

RSA 작성 키

이때 nginx 작업은 비밀번호를 입력하라는 메시지를 표시하지 않습니다:

[root@szxelab01-web-27 cert]# /application/nginx/sbin/nginx -t

nginx: 구성 파일 /application/nginx-1.12.2//conf/nginx.conf 구문은 괜찮습니다.

nginx: 구성 파일 /application/nginx-1.12. 2//conf/nginx.conf 테스트가 성공했습니다.

인증서 위치:

[root@szxelab01-web-27 cert]# pwd

/application/ nginx/cert

[ root@szxelab01-web-27 cert]# ll

총 24

-rw-r--r--. 루트 1452 6월 22일 14:29 cert.crt

-rw-r--r--.1 루트 루트 17 6월 22일 15:07 cert.srl

-rw-r --r--.1 루트 루트 1708 6월 22일 14:29 rsa_private.key

-rw-r--r--.1 루트 루트 1334 6월 22일 15:07 server.crt >

-rw-r--r --. 1 루트 루트 1070 6월 22일 15:04 server.csr

-rw-r--r--. 1 루트 루트 1679 6월 22일 15 :19 server.key

이제 테스트 시나리오의 사설 인증서 구성이 완료되었습니다.

5. 인증서 보기 및 변환

인증서 세부정보 보기

openssl x509 -in cert.crt -noout -text

인증서 인코딩 형식 변환

openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

pkcs#12 인증서 합성(개인 키 포함)

** pem 인증서와 개인 키를 pkcs#12 인증서로 변환**

openssl pkcs12 -export -in server.crt -i

nkey server.key -passin pass:111111 -password pass:111111 -out server.p12

그 중 -export는 pkcs#12 인증서를 지시하고 -inkey는 개인 키 파일을 지정하며 -passin은 개인 키( 파일) 비밀번호(노드는 암호화되지 않음), -password는 p12 파일의 비밀번호를 지정합니다(가져오기 및 내보내기)

** pem 인증서와 개인 키/CA 인증서를 pkcs#에 결합합니다. 12 인증서**

openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 \ -chain -CAfile ca.crt -password pass:111111 -out server-all.p12

여기서 -chain은 인증서 체인을 동시에 추가하도록 나타내고, -CAfile은 CA 인증서를 지정하며 내보낸 p12 파일에는 여러 인증서가 포함됩니다.

(다른 옵션: -name을 사용하여 서버 인증서 별칭을 지정할 수 있습니다. -caname을 사용하여 CA 인증서 별칭을 지정할 수 있습니다.)

** pcks#12 PEM 파일 추출(개인 키 포함) **

openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -out out/server.pem

그 중 -password는 p12 파일의 비밀번호를 지정합니다. (가져오기 및 내보내기) 및 -passout은 출력을 참조합니다. private 키의 암호화 비밀번호(노드는 암호화되지 않음)

내보낸 파일은 pem 형식이며 인증서와 개인 키(pkcs)를 모두 포함합니다. #8):

가방 속성

localKeyID: 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 subject=/C=CN/ST =GD/L=SZ/O=vihoo/OU=dev/CN= vihoo .com/emailAddress=yy@vihoo.com

issuer=/C=CN/ST=GD/L=SZ/ O=viroot/OU=dev/CN= viroot.com/emailAddress=yy@ viroot.com----인증서 시작----MIIDazCCAlMCCQCIOlA9/dcfEjANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJD

1LpQCA+2B6dn4scZwaCD---- -END CERTIFICATE------가방 속성

localKeyID : 97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 주요 속성: <속성 없음>

-----암호화된 개인 키 시작-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoI BQDC /6rAc1YaPRNf

K9ZLHbyBTKVaxehjxzJHHw==

-----암호화된 개인 키 끝--- --

개인 키만 추출

openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -nocerts -out out/key.pem

인증서만 추출(모든 인증서)

openssl pkcs12 -in server.p12 -password pass:111111 -nokeys -out out/key.pem

CA 인증서만 추출

openssl pkcs12 -in server-all.p12 -password pass: 111111 -nokeys -cacerts -out out/cacert.pem

서버 인증서만 추출

openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -clcerts -out out/cert.pem

6. 열립니다

sl 명령 참조

copyright 2024회사기업대전