Статьи

Настройка OpenSSL с помощью Resin 4.0.32 в Ubuntu 12.0.4

Для этого упражнения я использую 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.

Контейнер для серво с открытым исходным кодом

Контейнер сервлетов веб-профиля Java EE

Caucho’s Resin 4.0 JCache сообщение в блоге