2015-11-23 2 views
2

Я пытаюсь использовать службы REST Coldfusion 11, но я могу работать только с HTTP, а не с HTTPS. Когда я изменить протокол к HTTPS, он возвращает 404.Служба REST Service Coldfusion работает с HTTP, но не с HTTPS (404)

Шаги я взял:

1) Я сделал папку в корневом каталоге веб называется «апи-тест»

2) Внутри что папка, я создал файл с именем "animals.cfc", содержащий:

<cfcomponent rest="true" restpath="/animals"> 
     <cffunction name="getAnimals" access="remote" httpmethod="GET" produces="application/json" returntype="struct"> 
       <cfset value = { "cats": "dogs", "birds": "snakes" }> 
       <cfreturn value> 
     </cffunction> 
</cfcomponent> 

3) ColdFusion Administrator под данных & Услуги/REST Services , Я добавил «/ web/webapps/api-test» в качестве корневого пути и «api-test» в качестве карт.

4) В моем веб-браузере, при входе в один из моих CF веб-приложений на одном сервере (с использованием HTTP), я проверить API с JQuery и Firefox, Firebug/Web Developer плагин:

$.get("http://cftestapp1.mydomain.com/rest/api-test/animals"); 

данные возвращаются без проблем

5) в моем веб-браузере, когда я изменить протокол веб-приложения CF к HTTPS, и повторите ту же команду, но с HTTPS, я получаю 404.

$.get("https://cftestapp1.mydomain.com/rest/api-test/animals"); 

Моя среда состоит из двух веб-серверов (cftestapp1 и cftestapp2) за балансиром нагрузки (cftestapps). На веб-серверах работает Coldfusion 11 на Redhat Linux с Apache/Tomcat. Во время моего тестирования я сначала пробовал все с помощью балансировки нагрузки, и когда это не сработало, я сосредоточился исключительно на «cftestapp1» (как в примере выше). Я прочесал все настройки администратора Coldfusion и файл Apache httpd.conf и вышел пустым.

Я не могу найти много документации в Интернете или любого, кто, похоже, испытывает эту же проблему. Если у кого-то есть понимание, пожалуйста, помогите !! Благодаря!


Edit:

Каждый раз, когда я делаю запрос HTTPS, /и т.д./HTTPD/журналы/ssl_error_log (указанные в httpd.conf) показывает следующие ошибки в:

[Вт ноя 24 16:34:23 2015] [ошибка] [клиент my_ip_here] Файл не существует:/web/webapps/rest
[Вт ноя 24 16:34:23 2015] [ошибка] [клиент my_ip_here] Файл не существует:/web/webapps/opt

/web/webapps/rest - это ресурс, который я запрашиваю; однако нет физического файла «rest»; мои записи в службах Restup Restor администратора Coldfusion должны обрабатывать эти переадресации.

/веб/WebApps/выбрать, как представляется, попытка Апач на обслуживание 404 страницы, которая не находится в веб-корень, но довольно глубоко внутри /выбрать каталог.

Я также нашел эту ошибку, которая может быть не связана, поскольку у нас никогда не возникало проблемы с нашими HTTPS-запросами до добавления CF Rest Services.

[Вт 24 ноября 16:33:12 2015] [предупредит] сертификат сервера RSA является CA сертификат (BasicConstraints: CA == TRUE!?)

Ниже приведен отрывок из нашего Apache файл конфигурации (httpd.conf). Есть еще много строк, но они кажутся наиболее актуальными.

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 
</Directory> 

<Directory "/web/webapps"> 
Options FollowSymLinks 
AllowOverride None 
Order allow,deny 
Allow from all 
</Directory> 

Include "/etc/httpd/conf/mod_jk.conf" 

NameVirtualHost 127.0.0.1:443 
<VirtualHost 127.0.0.1:443> 
     ServerName localhost 
     DocumentRoot /web/webapps/ 
     SSLEngine on 
     SSLCertificateFile /etc/pki/tls/certs/localhost.crt 
     SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 
     SSLProtocol +SSLv3 +TLSv1 
     SSLCipherSuite RSA:!EXP:!NULL:+HIGH:-MEDIUM:-LOW 
     ErrorLog logs/cfadmin.ssl.error.log 
     CustomLog logs/cfadmin.ssl.access.log common 
</VirtualHost> 

ErrorDocument 404 /opt/cf11/cfusion/wwwroot/CFIDE/administrator/templates/404.cfm 

Кажется, что трафик HTTPS неправильно маршрутизирован для 404 и службы REST. Но я могу получить доступ ко всем другим папкам в нашем корневом веб-браузере /webapps при использовании HTTPS без каких-либо проблем.

+0

Работает ли он, если вы просто просматриваете URL-адрес 'https: // cftestapp1.mydomain.com/rest/api-test/animals' в своем браузере? Я понимаю, что это может дать ошибку или некоторые из них, но разрешает ли она? Вы импортировали сертификат в файл хранилища java (cacerts) на своих серверах? –

+0

Добавление сертификата SSL в наше хранилище ключей не исправило его. Но попасть в URL-адреса непосредственно в веб-браузере оказалось проще: с помощью HTTP он отображает JSON. С HTTPS я получаю страницу 404 Apache. Но если я разорву ссылку после _/rest/_, используя HTTP 'http: // cftestapp1.mydomain.com/rest/api-test-break-me/animals', я получаю пустую страницу. И если я разорву ссылку до _/rest/_, используя HTTP 'https: // cftestapp1.mydomain.com/break-me/rest/api-test/animals', я получаю ошибку 404 Coldfusion. Это может быть проблемой с нашей конфигурацией Apache. Я обновил свой вопрос, чтобы включить более подробную информацию об этом. Благодаря! –

+0

Глупый вопрос № 35: что у вас есть в поле ** host ** в конфигурации Rest Services в CF Admin? Справочный текст подсказывает, что вам может понадобиться порт # там, у вас есть две записи (по одному для HTTP и HTTPS?) – Juffy

ответ

1

Проблема решена. Я нашел два отдельных решения, которые были основаны на ответе от mt0 и справки Adobe (https://helpx.adobe.com/coldfusion/installing/configuring-your-system.html).

Решение №1.

Редактировать /etc/httpd/conf/httpd.conf

я добавил следующую строку в мой SSL VirtualHost директива:

<VirtualHost 127.0.0.1:443> 
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 

Однако, это будет работать только тогда, когда я изменил локальный IP-адрес (127.0.0.1) на IP-адрес сервера как для NameVirtualHost, так и VirtualHost. (С использованием *:443 не работает)

NameVirtualHost SERVER_IP_HERE:443 
<VirtualHost SERVER_IP_HERE:443> 

В то время как это решить эту проблему, я не хочу, чтобы жестко прописать IP-адрес сервера внутри конфигурационных файлов.Поэтому я продолжил исследование и нашел это альтернативное решение:

Решение №2 (желательно).

Редактировать /etc/httpd/conf.d/ssl.conf (оставляя файл httpd.conf в исходном состоянии)

я добавил следующую строку в мой SSL VirtualHost директивы, и перезапустить Apache:

<VirtualHost _default_:443> 
    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 

Это решило мою проблему.

Спасибо всем за помощь!

1

Ваш виртуальный хост ничего не знает о ColdFusion. Если вы посмотрите в файле /etc/httpd/conf/mod_jk.conf, он будет иметь строку, которая выглядит как:

JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 

который вызывается для службы HTTP (через Include "/etc/httpd/conf/mod_jk.conf" конфигурационного файла), но не для службы HTTPS.

Все, что вам нужно сделать, это скопировать эту строку в файл httpd.conf в объявлении виртуального хоста; например:

<VirtualHost 127.0.0.1:443> 
    ServerName localhost 
    DocumentRoot /web/webapps/ 
    SSLEngine on 
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt 
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 
    SSLProtocol +SSLv3 +TLSv1 
    SSLCipherSuite RSA:!EXP:!NULL:+HIGH:-MEDIUM:-LOW 
    ErrorLog logs/cfadmin.ssl.error.log 
    CustomLog logs/cfadmin.ssl.access.log common 

    JKMountFile "/path/to/ColdFusion11/config/wsconfig/1/uriworkermap.properties" 
</VirtualHost> 

Тогда виртуальный хост будет знать, где найти услуги.

+0

Спасибо! Ваша информация помогла решить мою проблему. В том числе ** uriworkermap.properties ** в моей конфигурации Apache VirtualHost было необходимо для обработки моих служб REST. Но я изменил свой ** ssl.conf **, а не ** httpd.conf **. Я добавил ответ с моими точными шагами. Я ценю вашу помощь! –

Смежные вопросы