Grails中基于RESTful证书的(X509)登录身份验证

托斯滕·克罗恩

我想在讲REST的Grails中设置基于证书的登录身份验证。

根据Burt Beckwith的文档,我使用Spring Security插件(spring-security-core:2.0-RC3)设置X509身份验证:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'de.app.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'de.app.UserRole'
grails.plugin.springsecurity.authority.className = 'de.app.Role'
grails.plugin.springsecurity.useX509 = true
grails.plugin.springsecurity.portMapper.httpsPort = "8443"
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/':                              ['permitAll'],
    '/index':                         ['permitAll'],
    '/index.gsp':                     ['permitAll'],
    '/**/js/**':                      ['permitAll'],
    '/**/css/**':                     ['permitAll'],
    '/**/images/**':                  ['permitAll'],
    '/**/favicon.ico':                ['permitAll']
]

证书文件的生成和Tomcat配置似乎有些棘手,但已经在另一个答案中指出了这一点我这样做了,并且使用当前的标准,我必须配置Tomcat 7,首先也是最重要的是keystoreFile,keystorePass和clientAuth。我无法直接访问server.xml。因此,我必须找到另一个地方。与此相关的Tomcat插件配置看起来仅限于参数keystorePath和keystorePassword。我通过将其添加到BuildConfig来进行尝试:

grails.tomcat.keystorePath = "${basedir}/grails-app/conf/server.jks"
grails.tomcat.keystorePassword = "password"

不知道这两行是否足够。我发现此解决方案设置了更多的连接器参数,但显然不再触发该事件,因此代码无效。

我发现了三种使用证书进行请求的方法,即Firefox,cURL和wget。没有任何工作!在我的Grails应用程序中全部登录后,我发现Spring Security中显然没有证书到达:

web.FilterChainProxy /vehicle at position 3 of 9 in additional filter chain; firing Filter: 'X509AuthenticationFilter'
x509.X509AuthenticationFilter Checking secure context token: null
x509.X509AuthenticationFilter No client certificate found in request.
x509.X509AuthenticationFilter No pre-authenticated principal found in request

卷曲请求:

curl -v -H "Content-Type: application/xml" --cert ./username.p12 -k -i https://localhost:8443/de.app/vehicle

及其替代方案:

wget —v --header='Content-Type: application/xml' --certificate='./username.p12' --no-check-certificate -S https://localhost:8443/de.app/vehicle

(我想解决的Mac OS X Mavericks的curl中有一个bug。)响应始终是403(禁止):

* Adding handle: conn: 0x7f840280fe00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f840280fe00) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8443 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 8443 (#0)
* TLS 1.0 connection using TLS_RSA_WITH_AES_128_CBC_SHA
* Server certificate: Web Server
> GET /de.app/vehicle HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8443
> Accept: */*
> Content-Type: application/xml
> 
< HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1

我究竟做错了什么?证书尚未发送或未从请求中正确获取证书。我相信后者。有什么猜测可以让我更深入地了解吗?

兰兰

您需要告诉Tomcat,您想对SSL使用客户端身份验证。连同已经添加到BuildConfig的密钥库配置一起,添加以下内容:

grails.tomcat.clientAuth = "want"

或者

grails.tomcat.clientAuth = "true"

如果不存在证书,则第一个不会自动使身份验证失败,而该true值会自动失败

另外,如果您打算对客户端使用自签名证书,则需要创建一个受信任的密钥库,并将Tomcat配置为也使用它。

grails.tomcat.truststorePath = "${grailsSettings.baseDir}/conf/ssl/server/truststore.jks"
grails.tomcat.truststorePassword = "changeit"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Meteor.js使用X509证书身份验证连接到Mongo

来自分类Dev

Apache X509证书身份验证模式设置HTTP标头

来自分类Dev

使用 X509 证书指纹进行用户身份验证

来自分类Dev

Grails 3.3 中基于“CLIENT-CERT”的 X509 证书认证

来自分类Dev

如何在选中“包括X509证书”选项的情况下实现Docusign Connect API身份验证?

来自分类Dev

IBM Worklight 6.1中基于X509证书的认证

来自分类Dev

如何完全验证X509证书?

来自分类Dev

如何验证 x509 证书的签名?

来自分类Dev

代理后面的WSO2身份服务器X509身份验证

来自分类Dev

Java中基于令牌的登录和身份验证

来自分类Dev

当我只想在Spring Boot中的某些调用上验证信任时,如何执行x509身份验证

来自分类Dev

配置Java MongoClient以使用X.509证书进行身份验证

来自分类Dev

以编程方式验证X509证书和私钥匹配

来自分类Dev

使用TrustLevel = Medium验证X509证书

来自分类Dev

泊坞窗登录失败-> x509:证书由未知权限签署..“ crypto / rsa:验证错误”

来自分类Dev

无法在Hono中使用基于X.509的身份验证注册租户

来自分类Dev

基于Glassfish 4证书的客户端身份验证

来自分类Dev

结合使用SSH和基于证书的身份验证

来自分类Dev

如何在Java中打开X509证书?

来自分类Dev

在Azure云服务中获取x509证书

来自分类Dev

从法师签名清单文件中获取X509证书

来自分类Dev

是否基于身份验证凭证RESTful返回不同的输出?

来自分类Dev

是否基于RESTful身份验证凭证返回不同的输出?

来自分类Dev

Golang中的单点登录身份验证

来自分类Dev

Worklight中的登录身份验证

来自分类Dev

HapiJS中基于角色的身份验证

来自分类Dev

Firebase中基于角色的身份验证

来自分类Dev

为什么故障处理在Spring Security X.509身份验证中不起作用?

来自分类Dev

如何在基于JWT的单一登录身份验证体系结构中实现注销?

Related 相关文章

  1. 1

    Meteor.js使用X509证书身份验证连接到Mongo

  2. 2

    Apache X509证书身份验证模式设置HTTP标头

  3. 3

    使用 X509 证书指纹进行用户身份验证

  4. 4

    Grails 3.3 中基于“CLIENT-CERT”的 X509 证书认证

  5. 5

    如何在选中“包括X509证书”选项的情况下实现Docusign Connect API身份验证?

  6. 6

    IBM Worklight 6.1中基于X509证书的认证

  7. 7

    如何完全验证X509证书?

  8. 8

    如何验证 x509 证书的签名?

  9. 9

    代理后面的WSO2身份服务器X509身份验证

  10. 10

    Java中基于令牌的登录和身份验证

  11. 11

    当我只想在Spring Boot中的某些调用上验证信任时,如何执行x509身份验证

  12. 12

    配置Java MongoClient以使用X.509证书进行身份验证

  13. 13

    以编程方式验证X509证书和私钥匹配

  14. 14

    使用TrustLevel = Medium验证X509证书

  15. 15

    泊坞窗登录失败-> x509:证书由未知权限签署..“ crypto / rsa:验证错误”

  16. 16

    无法在Hono中使用基于X.509的身份验证注册租户

  17. 17

    基于Glassfish 4证书的客户端身份验证

  18. 18

    结合使用SSH和基于证书的身份验证

  19. 19

    如何在Java中打开X509证书?

  20. 20

    在Azure云服务中获取x509证书

  21. 21

    从法师签名清单文件中获取X509证书

  22. 22

    是否基于身份验证凭证RESTful返回不同的输出?

  23. 23

    是否基于RESTful身份验证凭证返回不同的输出?

  24. 24

    Golang中的单点登录身份验证

  25. 25

    Worklight中的登录身份验证

  26. 26

    HapiJS中基于角色的身份验证

  27. 27

    Firebase中基于角色的身份验证

  28. 28

    为什么故障处理在Spring Security X.509身份验证中不起作用?

  29. 29

    如何在基于JWT的单一登录身份验证体系结构中实现注销?

热门标签

归档