Свяжите изображения с источником https

Когда я пытался добавить изображение в форму orbeon, я обнаружил, что в некоторых случаях работает нормально, а в других - нет.

Например, простой код с формой, использующей удаленное изображение по URL:

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ev="http://www.w3.org/2001/xml-events"
     xmlns:xi="http://www.w3.org/2001/XInclude"
     xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
     xmlns:exf="http://www.exforms.org/exf/1-0"
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:saxon="http://saxon.sf.net/"
     xmlns:sql="http://orbeon.org/oxf/xml/sql"
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder">
<xh:head>
    <xh:title>Form with Image by URL</xh:title>
    <xf:model id="fr-form-model" xxf:expose-xpath-types="true">

        <!-- Main instance -->
        <xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all">
            <form>
                <section-1>
                    <control-3>http://media2.giphy.com/avatars/aap/gjQXEptJHq99.gif</control-3>
                </section-1>
            </form>
        </xf:instance>

        <!-- Bindings -->
        <xf:bind id="fr-form-binds" ref="instance('fr-form-instance')">
            <xf:bind id="section-1-bind" name="section-1" ref="section-1">
                <xf:bind id="control-3-bind" ref="control-3" name="control-3" type="xf:anyURI"/>
            </xf:bind>
        </xf:bind>

        <!-- Metadata -->
        <xf:instance xxf:readonly="true" id="fr-form-metadata" xxf:exclude-result-prefixes="#all">
            <metadata>
                <application-name>UrlImage</application-name>
                <form-name>UrlImage</form-name>
                <title xml:lang="en">Form with Image by URL</title>
                <description xml:lang="en"/>
                <singleton>false</singleton>
            </metadata>
        </xf:instance>

        <!-- Attachments -->
        <xf:instance id="fr-form-attachments" xxf:exclude-result-prefixes="#all">
            <attachments>
                <css mediatype="text/css" filename="" size=""/>
                <pdf mediatype="application/pdf" filename="" size=""/>
            </attachments>
        </xf:instance>

        <!-- All form resources -->
        <!-- Don't make readonly by default in case a service modifies the resources -->
        <xf:instance id="fr-form-resources" xxf:readonly="false" xxf:exclude-result-prefixes="#all">
            <resources>
                <resource xml:lang="en">
                    <section-1>
                        <label>Untitled Section</label>
                    </section-1>
                    <control-3>
                        <label>This is a remote image</label>
                    </control-3>
                </resource>
            </resources>
        </xf:instance>

        <!-- Utility instances for services -->
        <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all">
            <request/>
        </xf:instance>

        <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all">
            <response/>
        </xf:instance>

    </xf:model>
</xh:head>
<xh:body>
    <fr:view>
        <fr:body xmlns:xbl="http://www.w3.org/ns/xbl"
                 xmlns:oxf="http://www.orbeon.com/oxf/processors"
                 xmlns:p="http://www.orbeon.com/oxf/pipeline">
            <fr:section id="section-1-control" bind="section-1-bind">
                <xf:label ref="$form-resources/section-1/label"/>
                <fr:grid>
                    <xh:tr>

                        <xh:td>
                            <xf:output id="control-3-control" bind="control-3-bind" mediatype="image/*">
                                <xf:label ref="$form-resources/control-3/label"/>

                                <!-- No hint? -->
                    <xf:alert ref="$fr-resources/detail/labels/alert"/>
                            </xf:output>
                        </xh:td>
                    </xh:tr>
                </fr:grid>
            </fr:section>
        </fr:body>
    </fr:view>
</xh:body>
</xh:html>

Важной частью является URL http://media2.giphy.com/avatars/aap/gjQXEptJHq99.gif, который работает нормально. Но если вы используете безопасное соединение, например, https://media2.giphy.com/avatars/aap/gjQXEptJHq99.gif не сможет получить изображение.

Я не уверен, возможно, проблема похожа на эту Доверять всем сертификатам с помощью HttpClient через HTTPS

Это то, что можно переопределить конфигурацией? Могу ли я использовать изображение, используя URL-адрес с сайта https, без добавления сертификата для каждого сервера в моем магазине java?


person King Midas    schedule 14.12.2015    source источник


Ответы (2)


Есть свойства, чтобы настроить это, но вы должны будьте осторожны, потому что вообще не стоит доверять всем сертификатам!

Ваш пример https://media2.giphy.com/avatars/aap/gjQXEptJHq99.gif работает, например, из Chrome без предупреждений или ошибок, поэтому я ожидаю, что он будет работать и из JVM. Возможно, JVM не настроен с тем же набором центров сертификации, что и браузер. В этом случае JVM можно настроить для добавления некоторых, хотя это немного сложно.

person ebruchez    schedule 14.12.2015
comment
Никакая JVM не использует те же сертификаты, что и браузер. Использует собственный магазин сертификатов. Но я посмотрю на параметр browser-compatible, чтобы увидеть, решает ли он проблему. - person King Midas; 15.12.2015
comment
Хорошо, ни один вариант browser-compatible или allow-all не поможет. Эти параметры, если я правильно понял, связаны с подключением к серверу Orbeon из клиента браузера с использованием https, но не для добавления удаленного изображения по URL-адресу в форме orbeon. Тогда, вероятно, использует сертификат JVM как любой клиент Java. Это правильно? - person King Midas; 15.12.2015
comment
Не этот параметр касается HTTP-клиента в Orbeon Forms при подключении к внешним сервисам. - person ebruchez; 15.12.2015
comment
Тогда я не могу заставить его работать. Изменение этого параметра в моей конфигурации orbeon не меняет поведения. Только добавление сертификата сервера в хранилище ключей помогает. - person King Midas; 16.12.2015
comment
Я думаю, это имеет смысл, потому что allow-all только избегает проверки совпадения имени хоста, но все равно отклоняет полностью недействительный сертификат. - person ebruchez; 16.12.2015
comment
Хорошо, тогда это объясняет поведение. Что касается решения, пока я могу сделать только то, что описано в моем собственном ответе. Если у меня есть только ограниченный набор серверов, это можно сделать так, но если я хочу разрешить какой-либо сервер, нет. В моем случае на данный момент я использую свой собственный сервер изображений, но это может стать проблемой в будущем. - person King Midas; 17.12.2015

Вероятно, такое поведение связано с тем, что Orbeon не использует URL изображения напрямую, выполняя промежуточную обработку в Orbeon «server-media».

Хорошо, кажется, в конце концов, это сработает, только если я добавлю сертификат в хранилище ключей orbeon, определенное в oxf.http.ssl.keystore.uri. Но это действительно только в том случае, если я знаю серверы, с которых будут связаны изображения. Невозможно связать любое изображение с любого сервера. Java позволяет отключить это поведение. Возможно ли это в Орбеоне?

person King Midas    schedule 15.12.2015
comment
Какое поведение вы просите отключить? - person ebruchez; 15.12.2015
comment
Проверка, действителен ли сертификат. - person King Midas; 16.12.2015
comment
Понятно. Однако сертификат кажется действительным, иначе Chrome не загрузил бы его, если бы указывал прямо на изображение? - person ebruchez; 16.12.2015
comment
С Mozilla и Chrome я могу загрузить изображение напрямую без каких-либо проблем. Вероятно, из-за того, что сертификат уже есть в собственном репозитории. Java использует другое хранилище сертификатов (и, следовательно, может иметь разные наборы сертификатов) - person King Midas; 17.12.2015
comment
И это, наверное, проблема. Возможно, решение состоит в том, чтобы обновить Java до последней версии. Список корневого ЦС верхнего уровня здесь. - person ebruchez; 17.12.2015