Роль файлов .keystore и CAKey.pem в SSL? - PullRequest
2 голосов
/ 06 марта 2012

Я успешно получил свое веб-приложение по https с http. На самом деле у меня есть сомнения по поводу роли двух файлов, которые встретились на этом этапе перехода. Я вижу два ключевых файла: один .keystore, а другой CAKey.pem. Я специально хочу знать, в какой момент они приходят к картине. В server.xml я нахожу запись атрибутов keystoreFile (для которого значением является местоположение хранилища ключей) и keystorePass (значение для которого является паролем, который я дал при создании файла .keystore), в то время как в ApplicationConfig.xml я нахожу два атрибута, т.е. openSSLLocation (против которого я вижу значение директории openssl), а вторым атрибутом является пароль (против которого то, что я дал значение пароля при генерации файла CAKey.pem).

Хотите конкретно знать, что эти файлы содержат и играют роль в SSL?

Редактировать Я прошел по ссылке, которую указал Бруно. Я также перешел по другой информативной ссылке, т. Е. http://www.verisign.com/ssl/ssl-information-center/how-ssl-security-works/. Теперь, после перехода по этим двум ссылкам, я понимаю, что файл kestore содержит детали SSL-сертификата (если мы используем авторизованный CA, такой как verisign, они предоставляют 128-битное шифрование, которое, вероятно, является ключом по умолчанию Хранить в бровиде сертификатов команды Java Java Keytool нет). На основании этого сертификата, содержащего закрытый ключ, происходит шифрование. Правильно? Как указано в версии для прямой связи, наконец, цифровая подпись также выдается как подтверждение. Не уверен. Имеет ли этот сертификат какое-либо назначение или просто подтверждение, как указано в ссылке? Файлы типа CACert.pem, CAKey.pem связаны с цифровыми сертификатами?

Редактировать 2

вот шаги, которые я выполнил для SSL

1) Загрузите Win32OpenSSL_Light-0_9_8t из http://www.slproweb.com/products/Win32OpenSSL.html и установите

2) В установочном каталоге OpenSSL создайте частный подкаталог. Закрытый ключ центра сертификации будет храниться здесь. В установочном каталоге OpenSSL создайте подкаталог newcerts. Новые сертификаты, подписанные ЦС, будут храниться здесь. В установочном каталоге OpenSSL создайте пустой файл с именем index.txt. OpenSSL хранит свою базу данных подписанных сертификатов в этом файле. Из подкаталога bin / PEM / demoCA установочного каталога OpenSSL скопируйте серийный файл в установочный каталог OpenSSL. Откройте скопированный серийный файл и отредактируйте его, чтобы прочитать 00 и сохранить. Серийный номер каждого нового CA-подписанного сертификата берется из содержимого этого файла, которое увеличивается каждый раз при подписании сертификата.

3) В openssl.cfg. Произошли следующие изменения dir = c: / openssl <- это каталог установки OpenSSL сертификат = $ dir / private / cacert.pem #crl = $ dir / crl.pem </p>

4) Создать самозаверяющий сертификат с помощью команды cd / d "% OPENSSL_HOME%" openssl req -new -x509 -days 2000 -ключить private \ CAKey.pem -out private \ CACert.pem -config bin \ openssl.cnf

5) Преобразовать файл PEM сертификата в файл в кодировке DER. cd / d "% OPENSSL_HOME%" openssl x509 -в частной \ CACert.pem -в частной \ CACert.cer -outform DER Эта команда создает файл CACert.cer в частном подкаталоге.

6) Изменить корневые сертификаты Java

cd% JAVA_HOME% keytool -import -keystore jre \ lib \ security \ cacerts -alias AppOpenSSLCert -file% OPENSSL_HOME% \ private \ cacert.cer

Это добавляет наш самозаверяющий сертификат CA к доверенным сертификатам Java, которые хранятся в файле jre \ lib \ security \ cacerts в установочном каталоге Java JDK. Наш самоподписанный сертификат CA хранится под псевдонимом AppOpenSSLCert.

В соответствии с документацией это должно было сработать (т.е. я попытался набрать URL с помощью https), но это не сработало. Чтобы это заработало, мне нужно было выполнить еще одну команду, т.е.

7)C: \ Program Files \ Java \ jdk1.6.0_23> keytool -genkey -alias tomcat -keyalg RSA, сгенерировавший файл .keystore ((который будет иметь сертификат SSL, который будет отправляться, когда клиент отправляет запрос https и клиент сопоставляет эти сертификаты в хранилище доверенных сертификатов).и закрытый ключ)

Наконец я внес изменения в server.xml, и он сработал keystoreFile = "c: /. keystore" keystorePass = "changeit"

Вот почему возникла путаницамой разум. Если мы используем сертификаты, указанные в файле .keystore, сгенерированном на 7-м шаге, то какова цель шагов, которые я сделал с 1 по 6 (файлы CAKey.pem и CACert.pem). Что бы я не понял в отношении SSL, я думаю, чтоне следует упоминать .keystore (сгенерированный на шаге 7) в server.xml, но какое-то другое хранилище ключей, вероятно, сгенерировано где-то на шаге 1-6, но не уверен, какое имя файла и где он генерируется? Последний вопрос в ссылке verisign. В нем говорится о двух сертификатах, т. Е. SSL-сертификате и цифровом сертификате. Где SSL-сертификат и цифраСертификат соответствия в приведенном выше сценарии?

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

С точки зрения Java, вы должны сначала попытаться понять разницу между хранилищем ключей и хранилищем доверенных сертификатов (оба хранилища ключей используются для различных целей).

В JSSE нет хранилища ключей по умолчанию, но некоторые приложения по умолчанию используют $HOME/.keystore: это то, что содержит ваш сертификат, для которого у вас есть закрытый ключ.

Напротив, склад доверенных сертификатов определяет, каким удаленным сертификатам вы готовы доверять. Он содержит ряд сертификатов CA, к которым может быть установлен путь сертификации при обнаружении нового сертификата. Если такой путь существует (и если сертификат не отозван, если он активирован), этот (априори) неизвестный сертификат считается доверенным.

Похоже, процедура, которую вы использовали, состояла в создании собственного центра сертификации, поэтому вы получите файл сертификата CA и его закрытый ключ (который, вероятно, будет этим файлом CAkey.pem). Это должно использоваться только для выдачи новых сертификатов с этим CA.

если мы используем авторизованный CA, например verisign, они обеспечивают 128-битное шифрование который, вероятно, хранилище ключей по умолчанию расширено командой java keytool сертификатов нет).

Это не сертификат, который используется для выбора размера ключа шифрования, это набор шифров. ( Эра сертификатов SGC закончилась .)

Во время рукопожатия SSL / TLS сертификат сервера используется для проверки подлинности сервера (чтобы гарантировать, что клиент обменивается данными с сервером, с которым он хочет общаться) и для согласования набора общих симметричных ключей (в зависимости от шифра). Suite): это те, которые используются для шифрования.

Если вы хотите сгенерировать сертификат с keytool для определенного размера ключа, используйте -keysize 2048 (например). Обратите внимание, что это размер ключа в сертификате, а не размер симметричных ключей, используемых для самого шифрования.

Более или менее ту же команду с keytool можно использовать для генерации CSR для отправки в коммерческий ЦС. Независимо от того, используете ли вы коммерческий CA или свой собственный, не имеет значения w.r.t. сила шифрования. Разница в том, что никто не распознает ваши собственные сертификаты по умолчанию, поэтому вам придется явно импортировать их в ваших клиентах. Сертификаты в основном полезны для проверки личности удаленного объекта, с которым вы общаетесь.

(Вас также могут заинтересовать дискуссии по этому вопросу .)

EDIT:

Вы смешали две совершенно разные процедуры.

1. Создание собственного CA.

Что вы сделали с OpenSSL, так это сгенерировали свой собственный центр сертификации (CA). Следовательно, вы получаете CAcert.pem и CAkey.pem, которые являются сертификатом CA и его закрытым ключом (используется для выдачи новых сертификатов с этим CA). Если вы пойдете по этому пути, все, что вам нужно сделать, это импортировать CAcert.pem в качестве доверенного сертификата ЦС на ваших клиентах, и сертификаты, которые вы выдаете с ним, будут доверенными. Вы также можете быть заинтересованы в OpenSSL CA.pl , который представляет собой сценарий, который охватывает многие из процедур, которые вы, возможно, сделали больше вручную.

OpenSSL не может работать с файлами JKS, и эта процедура не очень полезна без нескольких дополнительных шагов. Отсюда вы можете:

  • Создайте ключ + сертификат для вашего сервера, используя OpenSSL (CA.pl должен помочь). С точки зрения Java проще экспортировать его в формате PKCS # 12 (файл .p12): тогда вы сможете использовать этот файл непосредственно из Java в качестве хранилища ключей типа PKCS12 (keystoreType="PKCS12" в ваша конфигурация).
  • Создайте CSR с помощью keytool через -certreq, выдайте сертификат с помощью OpenSSL (опять же, CA.pl должен помочь), повторно импортируйте этот сертификат в ваше хранилище ключей (через keytool) и используйте это хранилище JKS.

2. Использование самозаверяющего сертификата для этого сервера напрямую.

Вероятно, это проще всего, если у вас только один сервер.

В этом случае выполните процедуру, описанную в этого ответа , и импортируйте сертификат, экспортированный с помощью -export, в доверенное хранилище вашего клиента (или в браузер).


Последний вопрос в ссылке verisign.речь идет о двух сертификатах, т. е. SSL-сертификате и цифровом сертификате.Где SSL-сертификат и цифровой сертификат соответствуют описанному выше сценарию?

Не совсем верно.Я не могу найти, где говорится о «цифровом сертификате».Строго говоря, не существует такого понятия, как «сертификат SSL», хотя выражение более или менее всегда означает «сертификат X.509, используемый для SSL / TLS».

Вы можете использовать сертификаты X.509 для других целейчем SSL / TLS и использовать SSL / TLS с другими типами сертификатов.Наиболее распространенным является X.509 с SSL / TLS.

«Цифровой сертификат» может также охватывать более широкую категорию, например, сертификаты OpenPGP также можно использовать для SSL / TLS (см. этот ответ , например).Существуют также Сертификаты атрибутов , которые даже не содержат открытого ключа (не читайте о них, пока вы действительно не поймете, что такое сертификаты X.509, в противном случае вы будете более запутаны).

Я предполагаю, что Verisign будет использовать «сертификат SSL» для обозначения сертификатов X.509 для использования с SSL и, возможно, «цифровых сертификатов» для сертификатов X.509 и для других целей, таких как e-подпись / шифрование почты.И то, и другое будет в контексте PKI (установленной Verisign).

3 голосов
/ 06 марта 2012

Файл хранилища ключей - это файл, в котором хранятся сведения о сертификатах, необходимых для обеспечения безопасности протокола. Сертификаты содержат информацию о том, кто является источником, из которого вы получаете данные приложения, и о том, чтобы подтвердить, является ли это предполагаемой стороной или нет. (Источник: http://techtracer.com/2007/09/12/setting-up-ssl-on-tomcat-in-3-easy-steps/)

CAKey.pem содержит закрытый ключ для сертификата аутентификации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...