Как защитить мой API Apache Camel REST? - PullRequest
0 голосов
/ 04 июня 2019

Я использую Apache Camel для размещения REST API для другого приложения верблюда.Как защитить этот REST API, он доступен только через HTTPS?

Я использую Camel 3.0.0-M1.Для REST API я использую REST DSL и компонент Camel-Jetty.Из других вопросов о SO и списке рассылки верблюдов я узнал, что мне просто нужно настроить компонент jetty для включения SSL.

Вот что я придумал:

<bean id="securejetty" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
    <property name="sslContextParameters" ref="sslContextParameters" />
</bean>

<camel:sslContextParameters id="sslContextParameters">
    <camel:keyManagers keyPassword="Linux01!">
        <camel:keyStore resource="/etc/certs/KeyStore.jks" password="Linux01!"/>
    </camel:keyManagers>
</camel:sslContextParameters>

<restConfiguration component="securejetty" contextPath="api/v0" port="9091" apiContextPath="api-doc" apiContextListing="false" enableCORS="true" host="0.0.0.0">
        <dataFormatProperty key="prettyPrint" value="true"/>
        <apiProperty key="base.path" value="/opcua"/>
        <apiProperty key="api.version" value="0.0.1"/>
        <apiProperty key="api.title" value="Blackbox REST API"/>
        <apiProperty key="api.description" value="The REST API for the Blackbox Project"/>
        <apiProperty key="api.contact.name" value="Blackbox"/>
        <corsHeaders key="Access-Control-Allow-*" value="0.0.0.0"/>
        <corsHeaders key="Access-Control-Max-Age" value="300"/>
</restConfiguration>

Я ожидал, что мой API будет доступен только через https.Но на самом деле он по-прежнему доступен через http, а не через https.Я частично выяснил, почему: «sslContextParameters» полностью игнорируется, поэтому верблюд не знает, что компонент jetty должен выполнять https.Я проверил это с присвоением переменной keyStore фиктивного пути.Это даже не выдает ошибку, даже если она объявлена ​​как ресурс, что заставляет меня поверить, что sslContextParameters полностью игнорируется.Мне нужно знать, как я могу защитить свой REST API на верблюжьей моле, чтобы он соответствовал стандартам безопасности моих компаний.

1 Ответ

0 голосов
/ 05 июня 2019

Были две ошибки, которые препятствовали моему успеху:

  1. Я не указал схему, так как http (кредит @Paizo)
  2. Настройка "securejetty" была неправильной, янужно специально настроить "джетти"

Вот исправленный конфиг:

<bean id="jetty" class="org.apache.camel.component.jetty9.JettyHttpComponent9">
    <property name="sslContextParameters" ref="sslContextParameters" />
</bean>

<camel:sslContextParameters id="sslContextParameters">
    <camel:keyManagers keyPassword="Linux01!">
        <camel:keyStore resource="/etc/certs/KeyStore.jks" password="Linux01!"/>
    </camel:keyManagers>
</camel:sslContextParameters>

<restConfiguration component="jetty" contextPath="api/v0" port="9091" apiContextPath="api-doc" apiContextListing="false" enableCORS="true" host="0.0.0.0">
        <dataFormatProperty key="prettyPrint" value="true"/>
        <apiProperty key="base.path" value="/opcua"/>
        <apiProperty key="api.version" value="0.0.1"/>
        <apiProperty key="api.title" value="Blackbox REST API"/>
        <apiProperty key="api.description" value="The REST API for the Blackbox Project"/>
        <apiProperty key="api.contact.name" value="Blackbox"/>
        <corsHeaders key="Access-Control-Allow-*" value="0.0.0.0"/>
        <corsHeaders key="Access-Control-Max-Age" value="300"/>
</restConfiguration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...