jetty做服务器出现401错误

有一天,我在开心的写代码,在jetty上做了类似302的重定向,不过是重定向到一个https的页面上,但是这个https页面直接访问是正常的,但是由jetty做重定向以后就不对了,显示错误:

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn‘t understand how to supply the credentials required.

Additionally, a 401 Unauthorized error was encountered while trying to use an ErrorDocument to handle the request.

很不开心,琢磨了一会,发现是jetty并没有接受证书,因为这个https页面的证书是自签名的,因此并没有被jdk所信任:

那么我们重头开始做一遍:

指令列表

  1. openssl genrsa -out rootkey.pem 2048

    生成根证书的密匙。

  2. openssl req -x509 -new -key rootkey.pem -out root.crt

    生成根证书。注意-x509,与步骤4和7不同。需要输入机构相关信息。

  3. openssl genrsa -out clientkey.pem 2048

    生成客户端的密匙。

  4. openssl req -new -key clientkey.pem -out client.csr 生成客户端证书的请求文件。请求根证书来签发。
  5. openssl x509 -req -in client.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -days 3650-out client.crt

    用根证书来签发客户端请求文件,生成客户端证书client.crt。

  6. openssl genrsa -out serverkey.pem 2048

    生成服务器端的密匙。

  7. openssl req -new -key serverkey.pem -out server.csr

    生成服务器端证书的请求文件。请求根证书来签发。

  8. openssl x509 -req -in server.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -days 3650-out server.crt

    用根证书来签发服务器端请求文件,生成服务器端证书server.crt。

  9. openssl pkcs12 -export -in client.crt -inkey clientkey.pem -out client.pkcs12

    打包客户端资料为pkcs12格式(client.pkcs12)。需要输入密码,请记住。

  10. openssl pkcs12 -export -in server.crt -inkey serverkey.pem -out server.pkcs12

    打包服务器端资料为pkcs12格式(server.pkcs12 )。需要输入密码,请记住。

  11. keytool -importkeystore -srckeystore client.pkcs12 -destkeystore client.jks -srcstoretype pkcs12

    生成客户端keystore(client.jks)。使用keytool的importkeystore指令。pkcs12转jks。需要pkcs12密码和jks密码。

  12. keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12

做完这些事情以后,我们有了根证书,还有了服务器证书和客户端的证书,但是这些证书并不受jdk认可,因此我们需要把这份keystore导入到jdk中去,

那么默认的地址是$JAVA_HOME/jre/lib/security/cacerts中,因此,我们可以把证书的keystore导入进来:

keytool -import -trustcacerts -alias clientkey -file client.crt -keystore  ‘/usr/lib/jvm/java-1.6.0-openjdk-amd64/jre/lib/security/cacerts‘

keytool -import -trustcacerts -alias serverkey -file server.crt -keystore  ‘/usr/lib/jvm/java-1.6.0-openjdk-amd64/jre/lib/security/cacerts‘

然后再次访问,就OK了~

当然也有其他的方案,比如让maven或者java忽略对证书合法性的检查,这类我们没有做研究。有兴趣的话可以分享一下。

时间: 2024-10-14 00:10:02

jetty做服务器出现401错误的相关文章

给Apache加载rewrite模块后,服务器返回500错误,以及a2enmod命令

我的机子是Ubuntu. 今天想给url做一个rewrite,让url看起来更漂亮一点.在Apache配置文件(我的是 /etc/apache/apache2.conf)文件中已经把AllOverride 指定为All.并且在.htaccess文件里写了如下rewrite规则: RewriteEngine on RewriteRule ^index http://www.baidu.com 重启Apache后,服务器返回500错误,令我很不解. 后来在 http://www.blogguy.cn

python接口测试之401错误的分析和解决(十六)

作者 无涯 在接口的测试中,经常会遇到客户端向服务端发送一个请求,服务端返回401的错误,那么今天本文章就来说明在接口测试中如何分析以及解决该问题. 我们知道在HTTP返回的状态码中,401错误表示的是被请求的页面需要用户名和密码.401的错误详细的可以描述为:客户端发送请求抖到服务端, 页面需要验证服务端会返回401的错误,见如下的错误信息: 401 UNAUTHORIZED Headers Content-Type: application/jsonWWW-Authenticate: Bas

HTTP 401错误

HTTP 401 错误 - 未授权 (Unauthorized) 介绍 您的Web服务器认为,客户端(例如您的浏览器或我们的 CheckUpDown 机器人)发送的 HTTP 数据流是正确的,但进入网址 (URL) 资源 , 需要用户身份验证 , 而相关信息 1 )尚未被提供, 或 2 )已提供但没有通过授权测试.这就是通常所知的“ HTTP 基本验证 ”. 需客户端提供的验证请求在 HTTP 协议中被定义为 WWW – 验证标头字段 (WWW-Authenticate header field

Win7 自带FTP将文件复制到FTP服务器时发生错误。

错误截图: 错误信息: 将文件复制到FTP服务器时发生错误.请检查是否有权限将文件放到该服务器上. 详细信息: 200 Type set to I. 200 PORT commad successful. 451 No mapping for the Unicode character exits in target multi-bye code page. 解决方案: 控制面板-->管理工具-->打开Internet信息服务(IIS)管理器.右键选中自己建立好的FTP站点,选择"管

MSMQ向远程服务器发送消息错误总结

一:路径错误(Path)错误 如果向远程服务器发送消息,请使用格式名的形式,如: FormatName:Direct=TCP:121.0.0.1\\private$\\queueFormatName:Direct=OS:machinename\\private$\\queuenameFormatName:DIRECT=http://222.10.xx.xx/msmq/Private$/test注意:FontName是区分大小写的.如果表达式为"FORMATNAME:Dire......"

解决gremlin-dirver访问tinkerpop服务器提示序列化错误

解决gremlin-dirver访问tinkerpop服务器提示序列化错误 问题描述 程序集成了gremlin-driver,访问远程tinkerpop服务器,在执行创建节点操作时,返回如下错误栈: 2017-08-17 15:25:27.519 ERROR 13548 --- [n-driver-loop-3] o.a.t.g.d.Handler$GremlinResponseHandler : Could not process the response io.netty.handler.c

android 初识socket通信--java程序做服务器

1.新建一个java工程做服务器 public class MyServer { String str ; public MyServer(){ try { //服务器端的声明用serversocket,括号里面写端口号,端口号是自己指定的 ServerSocket ss = new ServerSocket(4700); //accept方法在这里会一直等待客户端连接进来 Socket accept = ss.accept(); //新建一个读入流,字符集是utf-8 BufferedRead

Android4.0.4之后,服务器返回401或者407时,获取不到消息体的解决办法

Android4.0.4之后,服务器返回401或者407时,获取不到消息体的主要原因就是报错了,内容是: java.io.IOException: No authentication challenges found ,而导致这个异常的原因是,Android4.0.4之后,Google对服务器返回的401或者407的消息头进行了验证,如果服务器在消息头中添加了[WWW-Authenticate: XXX realm="xxx"],则没有问题,否则会在HttpURLConnection的

关于KindEditor组件上传本地图片报服务器异常的错误

今天突然间接到一个异常信息的问题,说系统的在线文本编辑器里上传本地图片报服务器异常的错误信息,开始我用firebug调试,发现前台不报错,然后我去服务器日志里找,也没看到相关信息.看网上写的说有可能是路径或者有可能是权限问题,我看权限已经设置,路径看后干脆直接改成: $save_path = '../../xxx';//相对upload_json.php的位置来说 $save_url = ' 但是我发现上传的时候还是报错,最后刷新缓存.好了. 注:我用的是php版.