Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base 64编码包含电子邮件地址的用户名--java_Java_Http_Encoding_Base64 - Fatal编程技术网

Base 64编码包含电子邮件地址的用户名--java

Base 64编码包含电子邮件地址的用户名--java,java,http,encoding,base64,Java,Http,Encoding,Base64,我一直在使用httpClient尝试将连接字符串写入https基础API,用户名/密码身份验证有点棘手 使用Appache commons base64编码器,我被迫将字节数组传递给构造函数,我的身份验证应该是email@companyName:password但是base 64转换器不支持@符号(因为它不是0-9 a-z或a-z或/+),但是在我可以验证之前,显然需要解决这个问题。。。。帮忙 代码(在请求之前): 完整错误代码: javax.net.ssl.SSLPeerUnverifiedE

我一直在使用httpClient尝试将连接字符串写入https基础API,用户名/密码身份验证有点棘手

使用Appache commons base64编码器,我被迫将字节数组传递给构造函数,我的身份验证应该是email@companyName:password但是base 64转换器不支持@符号(因为它不是0-9 a-z或a-z或/+),但是在我可以验证之前,显然需要解决这个问题。。。。帮忙

代码(在请求之前):

完整错误代码:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)

问题是您对字符串进行了双重编码。先在第一行,然后在第三行


除非您在另一端进行双重解码,否则您将遇到问题(为什么要这样做?)

您的服务器似乎没有有效的SSL证书


我过去在开发环境中所做的是实现一个新的X509TrustManager-这基本上是检查证书凭据是否有效。

base64转换器如何仅限于0-9、a-z等?您使用的base64类是什么?Java JRE的两个实现没有
编码方法。因为当您包含一个不是这些字符之一的字符时,您的字节数组被视为一个字符串,而构造函数不接受该字符串。使用com.sun.org.apache.xerces.internal.impl.dv.util.Base64;更改为org.apache.commons.codec.binary.Base64;为了便于使用,这实际上是我的复制粘贴中的一个错误,我必须删除实际值,并更改代码以保持编码字符串分开。所以,这不是我的问题,可悲的是,更新顶级帖子。抱歉搞混了。嗯,这里不太清楚。您使用的是哪个版本的库?我身边碰巧有一个没有这个方法,不返回字符串,等等。我认为您需要在这里更多地隔离代码,使您的问题更清楚。您发布的异常与此无关-这是一个基本的低级别SSL问题,不允许自签名证书,或不指向正确主机的证书,诸如此类。与编码无关,它是在那之前。
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)