SSL μΈμ¦μ„œ μž‘μ—…μ„ ν•˜λ‹€ 보면 .crt와 .pemμ΄λΌλŠ” ν™•μž₯자λ₯Ό κ°€μ§„ νŒŒμΌλ“€μ„ 자주 μ ‘ν•˜κ²Œ λ©λ‹ˆλ‹€. 이 λ‘˜μ˜ 차이점과 λ³€ν™˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • .crt (Certificate File)

    • .crtλŠ” 주둜 μΈμ¦μ„œ(Certificate) 자체λ₯Ό λ‹΄κ³  μžˆλŠ” νŒŒμΌμ„ λ‚˜νƒ€λ‚΄λŠ” ν™•μž₯μžμž…λ‹ˆλ‹€.

    • 이 νŒŒμΌμ€ λ°”μ΄λ„ˆλ¦¬(DER 인코딩) ν˜•μ‹μ΄κ±°λ‚˜, Base64둜 μΈμ½”λ”©λœ ν…μŠ€νŠΈ(PEM 인코딩) ν˜•μ‹μΌ 수 μžˆμŠ΅λ‹ˆλ‹€.

    • 주둜 PEM μΈμ½”λ”©λœ νŒŒμΌμ— μ‚¬μš©λ˜μ§€λ§Œ, κ°„ν˜Ή DER μΈμ½”λ”©λœ λ°”μ΄λ„ˆλ¦¬ μΈμ¦μ„œ νŒŒμΌμ—λ„ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

    • λ‚΄μš©λ¬Όμ€ κ³΅κ°œν‚€, μΈμ¦μ„œ μ†Œμœ μž 정보, λ°œκΈ‰μž 정보, 유효 κΈ°κ°„ λ“± μΈμ¦μ„œμ˜ 핡심 정보λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

  • .pem (Privacy Enhanced Mail)

    • .pem은 μ›λž˜ 이메일 λ³΄μ•ˆμ„ μœ„ν•΄ 개발된 ν˜•μ‹μ˜ 파일 ν™•μž₯μžμ΄μ§€λ§Œ, ν˜„μž¬λŠ” λ‹€μ–‘ν•œ μ•”ν˜Έν™” ν‚€, μΈμ¦μ„œ, 인증 μš”μ²­ 등을 μ €μž₯ν•˜λŠ” 데 널리 μ‚¬μš©λ©λ‹ˆλ‹€.

    • PEM νŒŒμΌμ€ 항상 Base64둜 μΈμ½”λ”©λœ ASCII ν…μŠ€νŠΈ ν˜•μ‹μ΄λ©°, -----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 같은 헀더와 ν‘Έν„° 라인으둜 각 데이터 블둝을 κ΅¬λΆ„ν•©λ‹ˆλ‹€.

    • ν•˜λ‚˜μ˜ .pem 파일 μ•ˆμ—λŠ” 단일 μΈμ¦μ„œλΏλ§Œ μ•„λ‹ˆλΌ, 개인 ν‚€(Private Key), 곡개 ν‚€(Public Key), 전체 μΈμ¦μ„œ 체인(도메인 μΈμ¦μ„œ + 쀑간 μΈμ¦μ„œ(λ“€) + 루트 μΈμ¦μ„œ) λ“± μ—¬λŸ¬ 개의 μ•”ν˜Έν™” 객체λ₯Ό ν•¨κ»˜ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 .pem 파일의 μ€‘μš”ν•œ νŠΉμ§• 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

  • μ£Όμš” 차이점 및 혼용 κ°€λŠ₯μ„±:

    • 인코딩: .crtλŠ” λ°”μ΄λ„ˆλ¦¬(DER) λ˜λŠ” ν…μŠ€νŠΈ(PEM)일 수 μžˆμ§€λ§Œ, .pem은 항상 ν…μŠ€νŠΈ(PEM)μž…λ‹ˆλ‹€.

    • λ‚΄μš©λ¬Ό: .crtλŠ” 주둜 단일 μΈμ¦μ„œλ₯Ό μ˜λ―Έν•˜μ§€λ§Œ, .pem은 μΈμ¦μ„œ, 개인 ν‚€, 전체 체인 λ“± λ‹€μ–‘ν•œ λ‚΄μš©μ„ 담을 수 μžˆμŠ΅λ‹ˆλ‹€.

    • ν™•μž₯자 κ΄€ν–‰: μ‹€μ œλ‘œλŠ” ν™•μž₯자만으둜 파일 ν˜•μ‹μ„ λ‹¨μ •ν•˜κΈ° μ–΄λ €μšΈ λ•Œκ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, .crt ν™•μž₯자λ₯Ό κ°€μ§„ 파일이 μ‹€μ œλ‘œλŠ” PEM μΈμ½”λ”©λœ ν…μŠ€νŠΈ 파일일 수 있고, λ°˜λŒ€λ‘œ .pem 파일이 단일 μΈμ¦μ„œλ§Œ 포함할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

    • Nginxμ—μ„œμ˜ μ‚¬μš©: Nginx와 같은 λ§Žμ€ μ›Ή μ„œλ²„λŠ” PEM μΈμ½”λ”©λœ μΈμ¦μ„œ νŒŒμΌμ„ μ„ ν˜Έν•©λ‹ˆλ‹€. λ”°λΌμ„œ .crt 파일이 λ°”μ΄λ„ˆλ¦¬ DER ν˜•μ‹μ΄λΌλ©΄ PEM ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ .crt 파일이 이미 PEM μΈμ½”λ”©λœ ν…μŠ€νŠΈ 파일이라면, ν™•μž₯자λ₯Ό .pem으둜 λ³€κ²½ν•˜κ±°λ‚˜ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄λ„ λ¬΄λ°©ν•œ κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. μ€‘μš”ν•œ 것은 파일의 ν™•μž₯μžκ°€ μ•„λ‹ˆλΌ μ‹€μ œ λ‚΄μš©κ³Ό 인코딩 ν˜•μ‹μž…λ‹ˆλ‹€.

  • λ³€ν™˜ (openssl μ‚¬μš©):

    • DER(.crt, .cer) to PEM:

      openssl x509 -inform DER -in certificate.crt -out certificate.pem
      
    • PEM to DER:

      openssl x509 -inform PEM -in certificate.pem -out certificate.der
      
    • PKCS#12(.pfx, .p12) to PEM (μΈμ¦μ„œ + κ°œμΈν‚€):

      openssl pkcs12 -in certificate.pfx -out certificate_bundle.pem -nodes
      

      (-nodes μ˜΅μ…˜μ€ κ°œμΈν‚€ μ•”ν˜Έν™”λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. ν•„μš”μ— 따라 μ•”ν˜Έν™”λœ μƒνƒœλ‘œ λ‘˜ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.)

  • 개인 ν‚€ 파일(.key)의 PEM λ³€ν™˜:

    개인 ν‚€ 파일 μ—­μ‹œ PEM ν˜•μ‹μœΌλ‘œ μ €μž₯λ˜λŠ” κ²½μš°κ°€ 많으며, -----BEGIN PRIVATE KEY-----와 같은 헀더λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

    # RSA κ°œμΈν‚€λ₯Ό PEM ν˜•μ‹μœΌλ‘œ λ³€ν™˜ (이미 PEM ν˜•μ‹μ΄μ§€λ§Œ, λ‚΄μš©μ„ ν™•μΈν•˜κ±°λ‚˜ 재포맷)
    openssl rsa -in private.key -text -out private.key.pem
    

    원본 κΈ€μ—μ„œλŠ” bundle.keyλ₯Ό bundle.key.pem으둜 λ³€ν™˜ν•˜λŠ” μ˜ˆμ‹œκ°€ μžˆμ—ˆλŠ”λ°, μ΄λŠ” .key 파일이 이미 PEM ν˜•μ‹μ΄μ§€λ§Œ λͺ…μ‹œμ μœΌλ‘œ .pem ν™•μž₯자λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ λ‚΄μš©μ„ ν™•μΈν•˜κΈ° μœ„ν•œ 과정일 수 μžˆμŠ΅λ‹ˆλ‹€. NginxλŠ” PEM ν˜•μ‹μ˜ 개인 ν‚€ νŒŒμΌμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

결둠적으둜, Nginx에 SSL μΈμ¦μ„œλ₯Ό μ„€μ •ν•  λ•ŒλŠ” ssl_certificate μ§€μ‹œμ–΄μ— μ‚¬μš©λ  파일이 PEM μΈμ½”λ”©λœ μΈμ¦μ„œ(λ˜λŠ” μΈμ¦μ„œ 체인)μ—¬μ•Ό ν•˜κ³ , ssl_certificate_key μ§€μ‹œμ–΄μ— μ‚¬μš©λ  파일이 PEM μΈμ½”λ”©λœ 개인 ν‚€μ—¬μ•Ό ν•©λ‹ˆλ‹€. ν™•μž₯μžκ°€ .crt라도 λ‚΄μš©μ΄ PEM ν˜•μ‹μ΄λ©΄ κ·ΈλŒ€λ‘œ μ‚¬μš© κ°€λŠ₯ν•  수 μžˆμ§€λ§Œ, ν˜Όλ™μ„ ν”Όν•˜κΈ° μœ„ν•΄ .pem으둜 ν†΅μΌν•˜κ±°λ‚˜, 파일 λ‚΄μš©μ„ 직접 ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.