[server] SSL CSR을 재사용 할 수 있습니까?

새 웹 사이트를 테스트하기 위해 자체 인증 SSL 인증서를 생성했습니다. 사이트가 게시 될 때가되었고 이제 GeoTrust에서 인증서를 구매하고 싶습니다. 자체 인증서에 대해 생성 한 것과 동일한 CSR을 사용할 수 있습니까, 아니면 새로운 CSR을 만들어야합니까?

풍부한



답변

동일한 키, 도메인 (일명 공통 이름), 연락처 세부 정보 및 유효 기간을 사용하는 한 동일한 CSR을 사용할 수 있어야합니다.

CSR을 정직하게 생성하는 것은 매우 간단한 일이지만, 많은 SSL 제공 업체가 엄격한 연락처 정보를 수정해야하는 경우 큰 문제가되지 않습니다.


답변

귀하의 예를 들어, CSR을 재사용하려고 노력할 가치가 있다고 생각하지 않습니다. 그러나, 다양한 팀의 Apple iOS 개발자에게는 (나와 마찬가지로) 이것을 수행 할만한 이유가 있습니다. 우리는 모든 서명 인증서를 생성하고 (실제로 Apple에 요청) 동일한 개인 키에서 인증서를 푸시합니다. 그렇게하면 85 개 이상의 앱에서 모두 쉽게 협업 할 수 있습니다. 이러한 이유로 우리는 단일 CSR을 유지하고 키가 유효한 한 항상 동일한 CSR을 사용합니다.

내가 아는 한 단일 개인 키에서 CSR을 반복적으로 생성 할 이유가 없습니다. 내가 틀렸다면 고치고 싶습니다.


답변

기간이 제한된 인증서를 사용하면 개인 키가 유출되는 경우 피해를 줄일 수 있습니다. CSR을 재사용하면 개인 키도 재사용되므로 CSR을 재사용하면 개인 키를 소유 한 사람이 다른 사람으로 영원히 사칭 할 수 있습니다.

CSR뿐만 아니라 개인 키 생성을 자동화하고 끊임없이 변화하는 개인 키를 애플리케이션 빌드 서버 및 푸시 서버에 배포하는 편리한 방법을 찾는 것이 좋습니다. 대부분의 필사자 개발자는 일반적으로 앱 스토어에 대한 릴리스 / 배포 빌드를 수행 할 필요가 없으므로 개인 키가 필요하지 않습니다.


답변

이론 상으로는 동일한 CSR을 재사용 할 수 있습니다.

  • 공개 키 ( RSA 암호화에 사용 된 숫자 만 (특정 수학))
  • “주제”세부 정보 (본인, 도메인 등) 해당 공개 키의 소유자를 식별하는 데 사용되는 텍스트

이것이 결국 인증서 (PublicKey 인증서의 줄임말)입니다.

그러나 다른 답변에서 언급했듯이 개인 키를 정기적으로 변경하여 새 인증서와 새로운 CSR을 얻는 것이 좋습니다.

CSR의 내용을 쉽게 볼 수 있습니다

예 :

$ openssl req -new -batch -subj "/CN=My Common Name/OU=My Org Unit/O=My Organisation" -sha256 -newkey rsa:2048 -keyout private.key -nodes -out request.csr
Generating a 2048 bit RSA private key
.............................................................................................+++++
.........+++++
writing new private key to 'private.key'
-----

$ ls
private.key  //  keep that private, the PublicKey side is easily be generated from this
request.csr // your PublicKey + Subject details

CSR

$ openssl req -in request.csr -text -noout
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: CN = My Common Name, OU = My Org Unit, O = My Organisation
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:                    ///////// Matches the PrivateKey modulus
                    00:b1:e8:de:e6:bf:21:45:51:75:15:23:5e:6e:7a:
                    7d:95:53:e5:d5:ec:5b:38:cd:7f:38:2d:53:8a:54:
...
                    fe:b5:78:de:9b:c1:ee:c1:51:6f:fd:fb:0e:62:09:
                    03:87
                Exponent: 65537 (0x10001)   ///////// Matches the PrivateKey publicExponent
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         a1:44:1f:b2:ec:c0:82:bc:99:da:69:ce:3e:77:9f:46:51:95:
...
         3b:2d:84:e3:73:ac:be:c8:da:29:fd:62:90:11:dd:8a:a6:4f:
         7b:f8:ac:f1

그리고 PrivateKey

$ openssl rsa -in private.key -text -noout
// all the below are numbers that takes part in Mathematical encryption (search for RSA maths)
RSA Private-Key: (2048 bit, 2 primes)

// The Numbers that can be freely published
modulus:
    00:b1:e8:de:e6:bf:21:45:51:75:15:23:5e:6e:7a:
    7d:95:53:e5:d5:ec:5b:38:cd:7f:38:2d:53:8a:54:
...
    fe:b5:78:de:9b:c1:ee:c1:51:6f:fd:fb:0e:62:09:
    03:87
publicExponent: 65537 (0x10001)

// The Numbers that must be kept private !
privateExponent:
    0a:81:73:d8:30:65:28:90:bc:d7:38:b5:74:d4:aa:
...
    b1:9b:30:2e:a2:dd:46:c1:10:0f:b0:da:ac:b6:ea:
    01
prime1:
    00:e0:28:01:87:95:70:d0:b8:21:07:e0:4f:96:a6:
...
    66:28:8f:3d:d7:eb:e6:b4:81
prime2:
    00:cb:2e:fe:1b:b6:30:ea:8d:9e:6d:23:83:d8:b6:
...
    4d:64:39:5c:9c:18:a0:14:07
exponent1:
    22:e2:36:f2:b9:af:f7:db:5f:d0:90:f8:f1:d1:ff:
...
    3a:31:a8:87:2c:c0:17:81
exponent2:
    5a:8b:3d:77:f1:ef:c8:86:85:a4:13:20:8d:31:a4:
...
    a5:ba:1e:37:fd:8d:50:7f
coefficient:
    00:d3:d3:b6:81:4b:a9:c2:aa:ff:e1:07:cb:de:ea:
...
    5c:e9:3b:d3:f7:67:82:c3:7f


답변