Я использовал Java Keytool для создания domain.csr
, domain.keystore
и domain.cer
. Мне нужно защитить домен с помощью SSL, для которого мне нужны domain.crt
и domain.key
. Как мне получить этих двоих? Одинаковы ли domain.jks
и domain.keystore
? В чем разница между всеми расширениями, такими как csr
, pem
, crt
и т. Д.?
В основном дублируйте Как генерировать .key и .crt файл из файла JKS для httpd apache сервера .
Все расширения файлов - это только конвенции; важно то, какие операции вы выполнили для создания файла, что вы оставляете очень расплывчатым. Во-первых, нет смысла 'генерировать' и CSR, и сертификат; они делают противоречивые вещи.
Java KeyStore JKS - это формат клавиатуры, используемый Java (в настоящее время; ожидается, что он изменится в Java 9). Люди часто называют эти файлы .jks
, но если вы использовали .keystore
в команде типа keytool -genkeypair
, которая не указывала -storetype
, то вы создали JKS файл с именем . keystore
.
.cer
и .crt
обычно используются для файлов, содержащих сертификат, или иногда несколько сертификатов в формате PEM. Существует два общих формата , обычно называемых именами, которые OpenSSL использует, а именно DER и PEM. Если вы посмотрите на файл с обычными текстовыми инструментами типа more cat type vi notepad
и увидите строку типа -----BEGIN CERTFICATE-----
(возможно со вставленной X.509
), а затем несколько строк почти всех букв и цифр, а затем аналогичную -----END
строку, которая является форматом PEM. Иногда люди используют эти расширения вместо или в дополнение для обозначения формата как xyzcert.pem xyzcert.der xyz.crt.pem xyz.crt.der
.
CSR означает Certificate Signing Request, который генерируется (в данном контексте) с помощью keytool -certreq
. CSR используется как часть процесса получения сертификата от "реального" ЦС, такого как Verisign GoDaddy и т.д. В этом случае вы обычно получаете из ЦС сертификат для вашего сервера И 'цепной' или промежуточный сертификат (иногда более одного); вы помещаете их в один или несколько файлов, а затем импортируете их в JKS для использования с программами Java, такими как Tomcat и т.д. В этом случае ваш файл(ы) сертификата были бы сгенерированы ЦС, а не вами.
Если вы не получаете сертификат от ЦС, то по умолчанию keytool -genkeypair
создает самоподписанный сертификат, пригодный для тестирования. Вы можете поместить этот сертификат в отдельный файл с помощью keytool -exportcert [-rfc]
, и что - это сертификат, который вы сгенерировали, но в этом случае вы не будете использовать CSR.
.key
иногда используется для отдельного файла (private)key в одном из нескольких форматов, используемых OpenSSL, и, таким образом, программами, использующими OpenSSL, например, Apache httpd и nginx. Форматы OpenSSL для privatekeys имеют DER и PEM варианты, очень похожие на certficates, поэтому люди также используют эти расширения, такие как xyzkey.pem xyzkey.der xyz.key.pem xyz.key.der
.
Наконец, PKCS12 - это другой формат клавиатуры, поддерживается большим количеством программного обеспечения, включая Java, OpenSSL, Windows и Mozilla NSS. Часто для PKCS12 используется расширение .p12
. (PKCS12 всегда бинарный; у него нет варианта PEM)
TLDR: если вам нужны отдельные файлы формата OpenSSL для приватного ключа и сертификата(ов) из клавиатуры формата JKS, сначала используйте keytool
для преобразования в pkcs12, а затем используйте openssl
для преобразования pkcs12 в отдельные PEM (обычно) или DER (редко).