Для этого упражнения я использую Amazon EC2 для запуска чистого экземпляра Ubuntu 12.0.4. Одним из преимуществ Resin перед другими аналогичными продуктами является интеграция с OpenSSL. OpenSSL намного быстрее и требует меньше ресурсов, чем поддержка SSL / TLS, которая поставляется с Java. Если вы используете Resin, вы хотите использовать OpenSSL, это более масштабируемо и быстрее.
Для этого упражнения я запустил 64-битный большой экземпляр в Amazon EC2 и использую Ubuntu 12.0.4 с Resin 4.0.32.
содержание |
Установить смолу
Я следую инструкциям по настройке:
$ sudo add-apt-repository http://caucho.com/download/debian
Затем обновите кеш репо
$ sudo apt-get update
Это теперь сломано с Ubuntu 12.0.4. Это будет работать снова в Resin 4.0.33 и выше.
Если вы используете Resin 4.0.32 и раньше, сделайте это вместо:
$ wget http://www.caucho.com/download/debian/dists/unstable/multiverse/binary-amd64/resin-pro_4.0.32-amd64.deb
Установите Java 7 SDK (или Java 6 SDK) и OpenSSL следующим образом:
$ sudo apt-get -f install $ sudo apt-get install openjdk-7-jdk $ sudo apt-get install libssl-dev $ sudo dpkg -i resin-pro_4.0.32-amd64.deb
(sudo apt-get install работает в Resin 4.0.33 для Debian, но не для Resin 4.0.32.)
Генерация смоляного пароля.
$ resinctl password-generate admin mypassword admin_user : admin admin_password : {SSHA}yAKopu5id740xAoePKZOGyAtu78DpZck
Добавьте имя пользователя и пароль в /etc/resin/resin.properties и включите их. (Оставьте в покое большинство смол. Свойств, если это не указано в следующем листинге.)
# Enable /resin-doc Resin documentation resin_doc : true app.https : 8443 web.http : 8080 web.https : 8443 # Must be identical between web, app, and cache clusters. cluster_system_key : changeme # Enable remote admin (for remote CLI and for EC2 ext: triad discovery) remote_admin_enable : true # Enable /resin-admin web administration console web_admin_enable : true # Permit access to /resin-admin from non-local network ip-addresses web_admin_external : true # Require HTTPS to access /resin-admin web_admin_ssl : true # Enable Resin REST Admin rest_admin_enable : true # Require SSL for REST Admin rest_admin_ssl : true admin_user : admin admin_password : {SSHA}ypqpON4IGSWY6XZ6NtU9uadsfasdfasdfasdfasdf
Вышеуказанное включает веб-администратора Resin удаленно через SSL, и мы можем использовать это для проверки наших настроек SSL.
Resin создаст самозаверяющий сертификат, поэтому загрузите администратора, чтобы проверить настройки Resin, прежде чем мы начнем.
Чтобы заставить OpenSSL работать, вам нужна лицензия Resin. Если у вас нет, свяжитесь с нами и получите.
Вы должны быть в состоянии загрузить админ и тому подобное с помощью SSL.
https://mydomain.com:8443/resin-admin/
Теперь все должно работать. Браузер будет жаловаться, потому что вы используете сертификат, который не от центра сертификации. Проходите мимо ошибок.
___________________________________________________
) — энтузиаст Java EE / Servlet и энтузиаст Open Source, который любит работать с контейнерным сервлетом Caucho Servlet, контейнером сервлетов Java EE Web Profile.
Контейнер для серво с открытым исходным кодом
Контейнер сервлетов веб-профиля Java EE
Caucho’s Resin 4.0 JCache сообщение в блоге
Настройка OpenSSL с самозаверяющим сертификатом
Далее давайте создадим файл openssl.cnf в /etc/resin/keys/openssl.cnf
/etc/resin/keys/openssl.cnf
[ req ] default_bits = 1024 distinguished_name = Caucho [ Caucho ] C = US C_default = US ST = CA ST_default = CA L = San Francisco L_default = San Francisco O = Caucho Tech O_default = Caucho Tech OU = QA Documentation OU_default = QA Documentation CN = www.caucho.com CN_default = www.caucho.com emailAddress = [email protected] emailAddress_default = [email protected]
Вышеупомянутый файл сам по себе не нужен, но в дальнейшем он сэкономит вам массу текста.
Затем создайте свой файл закрытого ключа с помощью openssl.
$ cd /etc/resin/keys $ pwd /etc/resin/keys $ sudo openssl genrsa -des3 -out myprivate.key 1024
Выше генерируется ключ RSA, который можно использовать как для шифрования, так и для подписи.
Вам будет предложено ввести защитную фразу.
(Обратите внимание, что для ключей RSA рекомендуется 2048 или выше, так как меньшее количество бит считается менее защищенным.)
RSA — это алгоритм криптографии с открытым ключом, основанный на сложности разложения больших целых чисел. RSA акроним для имен трех создателей. RSA создает, а затем публикует произведение двух больших простых чисел вместе с другим значением в качестве открытого ключа.
Выход
Generating RSA private key, 1024 bit long modulus ...++++++ ..........................++++++ e is 65537 (0x10001) Enter pass phrase for /etc/resin/myprivate.key: Verifying - Enter pass phrase for /etc/resin/myprivate.key:
Введите пароль дважды. Запомните этот пароль, он понадобится вам позже.
На этом этапе просто создайте самозаверяющий сертификат, чтобы увидеть, работает ли openssl и правильно ли он установлен.
$ sudo openssl req -config openssl.cnf -new -key myprivate.key -x509 -out my-self-signed-certificate.crt
Сертификаты предназначены для криптографии с открытым ключом и содержат открытый ключ. Открытые ключи легко выводятся из закрытых ключей, поэтому мы сначала создали закрытый ключ. Сертификат — это файл, содержащий информацию об организации и открытый ключ.
Чтобы узнать, работает ли SSL, вы должны проверить, можете ли вы загрузить смолу-админ.
Затем посмотрите журнал смол (/var/log/resin/jvm*.log) и найдите следующее:
Resin Professional 4.0.32 (built Mon, 01 Oct 2012 02:34:38 PDT) Copyright(c) 1998-2012 Caucho Technology. All rights reserved. [13-01-17 21:35:23.624] {main} 1013792.license -- 1 Resin server Caucho 1013792.license -- 1 Resin server Caucho Starting Resin Professional on Thu, 17 Jan 2013 21:35:21 +0000 (UTC) ... ... [13-01-17 21:35:27.616] {main} http listening to *:8080 OpenSSL support compiled for OpenSSL 0.9.8o 01 Jun 2010 [13-01-17 21:35:27.710] {main} https listening to *:8443
Если вы видите эти две вещи, то все должно быть хорошо.
___________________________________________________
) — энтузиаст Java EE / Servlet и энтузиаст Open Source, который любит работать с контейнерным сервлетом Caucho Servlet, контейнером сервлетов Java EE Web Profile.
Контейнер для серво с открытым исходным кодом
Контейнер сервлетов веб-профиля Java EE
Caucho’s Resin 4.0 JCache сообщение в блоге
Проверка настроек OpenSSL, если что-то идет не так
Если по какой-то причине OpenSSL не работает, вы можете использовать инструменты, которые поставляются с OpenSSL, чтобы проверить ваши настройки.
Откройте два терминала.
$ cd /etc/resin/keys $ sudo openssl s_server -accept 9999 -key myprivate.key -cert my-self-signed-certificate.crt
Выше открывается TLS-сервер, прослушивающий порт 9999, который использует ключ и сертификат, который вы только что сгенерировали.
См. Http://www.openssl.org/docs/apps/s_server.html# для получения дополнительной информации.
Теперь в отдельном окне терминала подключитесь к этому служебному серверу.
$ openssl s_client -connect localhost:9999 CONNECTED(00000003) depth=0 C = US, ST = CA, L = San Francisco, O = Caucho Tech, OU = QA Documentation, CN = www.caucho.com, emailAddress = [email protected] verify error:num=18:self signed certificate verify return:1 depth=0 C = US, ST = CA, L = San Francisco, O = Caucho Tech, OU = QA Documentation, CN = www.caucho.com, emailAddress = [email protected] verify return:1 --- Certificate chain 0 s:/C=US/ST=CA/L=San Francisco/O=Caucho Tech/OU=QA Documentation/CN=www.caucho.com/[email protected] i:/C=US/ST=CA/L=San Francisco/O=Caucho Tech/OU=QA Documentation/CN=www.caucho.com/[email protected] --- Server certificate -----BEGIN CERTIFICATE----- MIICsTCCAhoCCQCbeymZWYc9lzANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMC VVABCDEFGNVBAgTAkNBMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQK EwtDYXVjaG8gVGVjaDEZMBcGA1UECxMQUUEgRG9jdW1lbnRhdGlvbjEXMBUGA1UE AxMOd3d3LmNhdWNoby5jb20xHjAcBgkqhkiG9w0BCQEWD2luZm9AY2F1Y2hvLmNv bTAeFw0xMzAxMTcyMDU2MjhaFw0xMzAyMTYyMDU2MjhaMIGcMQswCQYDVQQGEwJV ... ... -----END CERTIFICATE----- subject=/C=US/ST=CA/L=San Francisco/O=Caucho Tech/OU=QA Documentation/CN=www.caucho.com/[email protected] issuer=/C=US/ST=CA/L=San Francisco/O=Caucho Tech/OU=QA Documentation/CN=www.caucho.com/[email protected] --- No client certificate CA names sent --- SSL handshake has read 1246 bytes and written 376 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: zlib compression Expansion: zlib compression SSL-Session: Protocol : TLSv1.1 Cipher : ECDHE-RSA-AES256-SHA Session-ID: 07C6B7627821D29E814F069D2C7Casdfasdfasdfasdfasdfasdfasdfasdf Session-ID-ctx: Master-Key: C38B943A0E5570A2662695ABCDEFlkjalkj;lkjl;kjasdlfkjasdlkfjasl;kdfjalksdjf Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - 71 24 62 44 f1 c0 bc 95-8f e7 04 FF 73 c1 5c de q$bD...00...s.\. 0010 - 13 54 e8 f3 20 1d 2b 82-e8 83 05 62 4d 46 f9 3c .T.. .+....bMF.< ... 0040 - db 2b 3f d3 fa 7d b9 04-9f 65 95 d8 bb 10 d3 ca .+?..}...e...... 0050 - 47 79 cf 0c 65 67 e5 5f-90 4e a5 43 c7 b0 31 bb Gy..eg._.N.C..1. 0060 - f3 9b a4 c4 72 9c 24 18-5b 7a 90 63 4f 25 35 2c ....r.$.[z.cO%5, ... Compression: 1 (zlib compression) Start Time: 1358459991 Timeout : 300 (sec) Verify return code: 18 (self signed certificate)
См. Http://www.openssl.org/docs/apps/s_client.html# для получения более подробной информации.
Чтобы попробовать это в Resin, вам просто нужно изменить etc / смолы / смола.properties следующим образом:
# OpenSSL certificate configuration # Keys are typically stored in the resin configuration directory. openssl_file : keys/my-self-signed-certificate.crt openssl_key : keys/myprivate.key openssl_password : password
Просто перейдите к:
https://mydomain.com:8443/resin-admin/
Теперь все должно работать. Браузер будет жаловаться, потому что вы используете сертификат, который не от центра сертификации. Проходите мимо ошибок.
GoDaddy становится популярным центром сертификации SSL, потому что это недорогая альтернатива. Давайте использовать GoDaddy, чтобы настроить настоящий SSL, чтобы показать, как это делается.
___________________________________________________
) — энтузиаст Java EE / Servlet и энтузиаст Open Source, который любит работать с контейнерным сервлетом Caucho Servlet, контейнером сервлетов Java EE Web Profile.
Контейнер для серво с открытым исходным кодом
Контейнер сервлетов веб-профиля Java EE
Caucho’s Resin 4.0 JCache сообщение в блоге
Использование GoDaddy
Настройте учетную запись GoDaddy.
Вы должны изменить размер закрытого ключа на 2048 следующим образом:
$ sudo openssl genrsa -des3 -out myprivate.key 2048 $ sudo openssl req -new -config openssl.cnf -key myprivate.key -out CA_request.csr
Выше создается файл запроса. Вы можете передать этот файл запроса в любой центр сертификации. Вы даете им деньги. Подождите от 2 до 24 часов, а затем вам дадут сертификат.
Перейдите на https://certs.godaddy.com/, чтобы узнать больше информации.
(Это не одобрение GoDaddy. Я выбрал его, потому что он был самым дешевым.)
Вы должны вырезать и вставить файл CA_request.csr в текстовое поле godaddy.com, связанное с созданием нового сертификата SSL.
Подождите два дня и поспорите со службой технической поддержки GoDaddy, что я на самом деле реальный человек, и я не собираюсь использовать SSL-сертификат для того, чтобы забить тюленей с помощью слизгера Луисвилла.
Если повезет, сертификат GoDaddy появится в моей учетной записи в домене, который я зарегистрировал. www.mydomain.com.
Прикрепите zip-файл с сертификатами где-нибудь, где вы можете его получить. Загрузите сертификат на сервер.
$ unzip mydomain.com.zip
Здесь должно быть два файла:
$ ls go_bundle.crt mydomain.com.crt
Вы должны переместить их туда, где Ресин сможет их найти.
$ sudo mv gd_bundle.crt /etc/resin/keys $ sudo mv mydomain.info.crt /etc/resin/keys $ cd /etc/resin/keys $ ls CA_request.csr mydomain.info.crt my-self-signed-certificate.crt gd_bundle.crt myprivate.key openssl.cnf
Вы должны сохранить эти файлы в безопасном месте.
Теперь нам нужно изменить Resin, чтобы получить файл цепочки SSL.
Вы можете указать цепочку сертификатов следующим образом:
<http port="443"> <openssl> <certificate-key-file>keys/your_domain.key</certificate-key-file> <certificate-file>keys/your_domain.crt</certificate-file> <certificate-chain-file>keys/chain.txt</certificate-chain-file> <password>test123</password> </openssl> </http>
По умолчанию openssl настраивается с помощью смолы.properties и cluster-default.xml.
Вот фрагмент из /etc/resin/cluster-default.xml
<resin:when test="${openssl_file != null}"> <http address="${http_address?:'*'}" port="${https}"> <openssl> <certificate-file>${file_lookup(openssl_file,__DIR__)}</certificate-file> <certificate-key-file>${file_lookup(openssl_key, __DIR__)}</certificate-key-file> <password> <resin:Password>${openssl_password}</resin:Password> </password> </openssl> </http> </resin:when>
Проблема в том, что он не указывает файл цепочки, что может быть довольно распространенным явлением, но недостаточно распространенным, чтобы по умолчанию его можно было преобразовать в смолы. Свойства. (Если вы используете Verisign или более известные полномочия CA, вам понадобится только файл цепочки, это в основном для поддержки GoDaddy и других менее известных авторитетов, полное объяснение внизу этой записи.)
Попробуй это. Измените /etc/resin/cluster-default.xml следующим образом:
<resin:when test="${openssl_file != null}"> <http address="${http_address?:'*'}" port="${https}"> <openssl> <certificate-file>${file_lookup(openssl_file,__DIR__)}</certificate-file> <certificate-key-file>${file_lookup(openssl_key, __DIR__)}</certificate-key-file> <certificate-chain-file>${file_lookup(openssl_chain_file,__DIR__)}</certificate-chain-file> <password> <resin:Password>${openssl_password}</resin:Password> </password> </openssl> </http> </resin:when>
Обратите внимание, что я добавил <файл-цепочки сертификатов> к кластеру по умолчанию и указал его на свойство openssl_chain_file.
Если вы используете Verisign или более известный центр сертификации CA, вам понадобится только следующее:
# OpenSSL certificate configuration # Keys are typically stored in the resin configuration directory. openssl_file : keys/mydomain.com.crt openssl_key : keys/myprivate.key openssl_password : password
Вам не понадобится файл цепочки с Verisign.
Но для этого примера нам нужен файл цепочки, поэтому давайте попробуем его настроить.
Затем измените ваш /etc/resin/resin.properties следующим образом (эта конфигурация неверна, но из документов это звучит так, как будто они говорят вам делать):
# OpenSSL certificate configuration # Keys are typically stored in the resin configuration directory. openssl_file : keys/mydomain.com.crt openssl_key : keys/myprivate.key openssl_chain_file : keys/gd_bundle.crt openssl_password : password
Вышеописанное не работает из браузера, поэтому давайте отладим его, но оно работает из инструментов командной строки из openssl.
$ sudo openssl s_server -accept 9999 -key myprivate.key -cert javaeefun.info.crt -CAfile gd_bundle.crt
$ openssl s_client -connect localhost:9999
Это работает. Итак, теперь мы знаем, что нам нужно добавить mydomain.com.crt в цепочку. (Хорошо, это был довольно большой скачок, поэтому позвольте мне объяснить, что такое файл chain.txt сразу после того, как я покажу вам, как его правильно создать.)
Тестовый клиент и сервер сработали, поэтому подключите mydomain.com.crt к цепочке следующим образом:
$ sudo cat mydomain.com.crt gd_bundle.crt > chain.txt
Файл gd_bundle.crt представляет собой полную цепочку сертификатов SSL от GoDaddy, но он не содержит наш сертификат, который нам нужен. Мы использовали cat для добавления gd_bundle.crt после нашего mydomain.com.crt.
Теперь повторите тестирование с помощью инструментов openssl следующим образом:
$ sudo openssl s_server -accept 9999 -key myprivate.key -cert mydomain.com.crt -CAfile chain.txt
$ openssl s_client -connect localhost:9999
Инструментам openssl нравится наша новая настройка. Мы можем подключиться с клиента.
Теперь настройте смолу, чтобы использовать файл chain.txt вместо нашего файла.
# OpenSSL certificate configuration # Keys are typically stored in the resin configuration directory. openssl_file : keys/mydomain.com.crt openssl_key : keys/myprivate.key openssl_chain_file : keys/chain.txt openssl_password : password
Теперь повторите тест из браузера.
https://mydomain.com:8443/resin-admin/
Все должно быть хорошо.
Примечание: если вы видите «T_CLIENT_HELLO: нет общего шифра» на стороне сервера, убедитесь, что вы правильно включили mydomain.com.crt и gd_bundle.crt в chain.txt.
{resin-port-443-46} BadRequestException: java.io.IOException: errno=0 openssl='139770598954752:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1230:
___________________________________________________
) — энтузиаст Java EE / Servlet и энтузиаст Open Source, который любит работать с контейнерным сервлетом Caucho Servlet, контейнером сервлетов Java EE Web Profile.
Контейнер для серво с открытым исходным кодом
Контейнер сервлетов веб-профиля Java EE
Caucho’s Resin 4.0 JCache сообщение в блоге
Еще немного истории цепочек сертификатов и почему они нужны с GoDaddy
Эта информация была получена из других мест: http://bloggit.livejournal.com/26595.html
GoDaddy имеет хорошие цены и достойный сервис. К сожалению, их объяснения немного кратки, как и документация для OpenSSL.
Браузеры, такие как Opera и Internet Explorer, знают о GoDaddy. Но Firefox, Chrome, Safari и другие приложения этого не делают. Таким образом, что касается сертификата CA, его признание не так хорошо, как у Verisign и других (пока). Если вы просто используете их сертификат CA, ваше устройство или браузер могут выдать вам старый «Неизвестный орган». Это совсем не то, что вы хотите от центра сертификации.
Сертификаты SSL — это пакеты шифрования, которые ссылаются на другие пакеты шифрования, чтобы сформировать цепочку доверия. Это немного похоже на запрос ссылок. Ваш браузер, приложение или устройства знают несколько авторитетов высшего уровня, но, конечно, не все. Когда вы нажимаете новый сертификат SSL, ваш браузер (или библиотека или приложение SSL) проверяет новый сертификат по собственному списку доверенных прав браузера.
Вы можете просмотреть список полномочий в своем браузере довольно легко: Firefox: Параметры — Дополнительно — Просмотр сертификатов — Полномочия.
Хитрость заключается в том, чтобы предоставить цепочку ссылок от вашего сертификата до GoDaddy, вплоть до доверенного органа, о котором Firefox уже знает. Это то, что сделал созданный нами файл chain.txt. Это поместило цепь GoDaddy в нашу сеть. Firefox не доверяет GoDaddy, но доверяет материнской компании GoDaddy Starfield, поэтому мы создали цепочку mydomain.com-> godaddy.com-> startfield.com. Firefox говорит, что я не знаю mydomain.com. Затем он смотрит на следующий сертификат в цепочке и говорит, что я тоже не знаю GoDaddy, затем он видит следующий сертификат в цепочке и говорит, что я знаю Starfield. Затем Firefox спрашивает Starfield (более или менее), доверяете ли вы GoDaddy. Стартфилд говорит да. Затем FireFox спрашивает GoDaddy, доверяете ли вы mydomain.com, и GoDaddy отвечает «да». Затем результаты доверия кешируются,теперь Firefox знает о GoDaddy и MyDomain.com. Whoot!
Мы сделаем это, включив сертификат «цепочка».
___________________________________________________
) — энтузиаст Java EE / Servlet и энтузиаст Open Source, который любит работать с контейнерным сервлетом Caucho Servlet, контейнером сервлетов Java EE Web Profile.
Контейнер для серво с открытым исходным кодом