SSLHandshakeException通过ApacheKnox发送curl命令

SSLHandshakeException通过ApacheKnox发送curl命令,ssl,curl,knox-gateway,Ssl,Curl,Knox Gateway,我已经创建了一个简单的RESTWeb服务,它返回{“code”:4,“type”:“ok”,“message”:“hello here!”}fromcurl-k-u admin:admin-X GET”https://server.running.service:8447/demo/v1/test“ 我想让所有用户通过ApacheKnox访问web服务,以便对他们进行身份验证。然而,当我使用curl-k-u admin:admin-X GET时https://server.running.kno

我已经创建了一个简单的RESTWeb服务,它返回
{“code”:4,“type”:“ok”,“message”:“hello here!”}
from
curl-k-u admin:admin-X GET”https://server.running.service:8447/demo/v1/test“

我想让所有用户通过ApacheKnox访问web服务,以便对他们进行身份验证。然而,当我使用curl-k-u admin:admin-X GET时https://server.running.knox:8443/gateway/platform//hello/v1/test“我回来了:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /gateway/platform/hello/v1/test. Reason:
<pre>    Server Error</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>

</body>
</html>
我不确定在向Knox添加服务时是否犯了错误。我使用以下内容创建了rewrite.xml:

<service role="HELLOSERVICE" name="hello" version="0.0.1">
    <routes>
        <route path="/hello/"/>
        <route path="/hello/**"/>
        <route path="/hello/**?**"/>
    </routes>
</service>
<topology>
    <gateway>    
        <provider>
            <role>authentication</role>
            <name>ShiroProvider</name>
            <enabled>true</enabled>
            <param>
                <name>sessionTimeout</name>
                <value>30</value>
            </param>
            <param>
                <name>main.ldapRealm</name>
              <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
            </param>
            <param>
                <name>main.ldapRealm.userDnTemplate</name>
                <value>uid={0},ou=people,dc=hadoop,dc=apache,dc=org</value>
            </param>
            <param>
                <name>main.ldapRealm.contextFactory.url</name>
                <value>ldap://server.running.knox:33389</value>
            </param>
            <param>
       <name>main.ldapRealm.contextFactory.authenticationMechanism</name>
                <value>simple</value>
            </param>
            <param>
                <name>urls./**</name>
                <value>authcBasic</value>
            </param>
        </provider>
        <provider>
            <role>identity-assertion</role>
            <name>Default</name>
            <enabled>true</enabled>
        </provider>
        <provider>
            <role>authorization</role>
            <name>AclsAuthz</name>
            <enabled>true</enabled>
        </provider>
        <provider>
            <role>webappsec</role>
            <name>WebAppSec</name>
            <enabled>true</enabled>
            <param><name>csrf.enabled</name><value>false</value></param> <!-- CSRF Disabled -->
            <param><name>csrf.customHeader</name><value>X-XSRF-Header</value></param>
            <param><name>csrf.methodsToIgnore</name><value>GET,OPTIONS,HEAD</value></param>
            <param><name>cors.enabled</name><value>true</value></param>
            <param><name>cors.allowOrigin</name><value>*</value></param>
            <param><name>cors.allowSubdomains</name><value>false</value></param>
            <param><name>cors.supportedMethods</name><value>GET,POST,HEAD,OPTIONS,PUT,DELETE</value></param>
        </provider>
    </gateway>
    <service>
        <role>HELLOSERVICE</role>
        <url>http://server.running.service:8088/demo</url>
    </service>    
</topology>

以及包含以下内容的service.xml:

<service role="HELLOSERVICE" name="hello" version="0.0.1">
    <routes>
        <route path="/hello/"/>
        <route path="/hello/**"/>
        <route path="/hello/**?**"/>
    </routes>
</service>
<topology>
    <gateway>    
        <provider>
            <role>authentication</role>
            <name>ShiroProvider</name>
            <enabled>true</enabled>
            <param>
                <name>sessionTimeout</name>
                <value>30</value>
            </param>
            <param>
                <name>main.ldapRealm</name>
              <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
            </param>
            <param>
                <name>main.ldapRealm.userDnTemplate</name>
                <value>uid={0},ou=people,dc=hadoop,dc=apache,dc=org</value>
            </param>
            <param>
                <name>main.ldapRealm.contextFactory.url</name>
                <value>ldap://server.running.knox:33389</value>
            </param>
            <param>
       <name>main.ldapRealm.contextFactory.authenticationMechanism</name>
                <value>simple</value>
            </param>
            <param>
                <name>urls./**</name>
                <value>authcBasic</value>
            </param>
        </provider>
        <provider>
            <role>identity-assertion</role>
            <name>Default</name>
            <enabled>true</enabled>
        </provider>
        <provider>
            <role>authorization</role>
            <name>AclsAuthz</name>
            <enabled>true</enabled>
        </provider>
        <provider>
            <role>webappsec</role>
            <name>WebAppSec</name>
            <enabled>true</enabled>
            <param><name>csrf.enabled</name><value>false</value></param> <!-- CSRF Disabled -->
            <param><name>csrf.customHeader</name><value>X-XSRF-Header</value></param>
            <param><name>csrf.methodsToIgnore</name><value>GET,OPTIONS,HEAD</value></param>
            <param><name>cors.enabled</name><value>true</value></param>
            <param><name>cors.allowOrigin</name><value>*</value></param>
            <param><name>cors.allowSubdomains</name><value>false</value></param>
            <param><name>cors.supportedMethods</name><value>GET,POST,HEAD,OPTIONS,PUT,DELETE</value></param>
        </provider>
    </gateway>
    <service>
        <role>HELLOSERVICE</role>
        <url>http://server.running.service:8088/demo</url>
    </service>    
</topology>

platform.xml文件具有:


认证
西罗普罗维德
真的
会话超时
30
main.ldapRealm
org.apache.hadoop.gateway.shirorelm.KnoxLdapRealm
main.ldapRealm.userDnTemplate
uid={0},ou=people,dc=hadoop,dc=apache,dc=org
main.ldapRealm.contextFactory.url
ldap://server.running.knox:33389
main.ldapRealm.contextFactory.authenticationMechanism
简单的
网址/**
authcBasic
身份断言
违约
真的
授权
阿克索斯
真的
webappsec
WebAppSec
真的
csrf.enabledfalse
csrf.customHeaderX-XSRF-Header
csrf.methodsToIgnoreGET、OPTIONS、HEAD
使能真
金鸡儿*
cors.allowSubdomainsfalse
cors.supportedMethodGet、POST、HEAD、OPTIONS、PUT、DELETE
HELLOSERVICE
http://server.running.service:8088/demo

我在设置诺克斯时出错了吗?要通过Knox向我的服务发送命令,我还需要进行其他配置吗?

查看日志,Knox似乎正在尝试连接到https url()

但我看到拓扑文件中确实有http url,所以可能发生了https升级

这里的问题似乎是您的后端使用https,因此您可能需要在Knox集群中提供后端证书,即需要添加到Knox trust store(gateway.jks)的证书


HTH

查看看起来Knox试图连接到https url()

但我看到拓扑文件中确实有http url,所以可能发生了https升级

这里的问题似乎是您的后端使用https,因此您可能需要在Knox集群中提供后端证书,即需要添加到Knox trust store(gateway.jks)的证书


HTH

对Sandeep正确识别问题的答案进行了轻微更正。您需要将后端服务的公共证书导入Apache Knox服务器的cacerts文件。

对Sandeep正确识别问题的回答稍加更正。您需要将后端服务的公共证书导入apacheknox服务器的cacerts文件