前言 okhttp是一个网络请求框架,也是目前市面上使用最多的网络框架之一。 之前参与的项目一直没使用,这次刚好有个机会使用OKHttp,记录下。...certificatePinner; // HTTPS校验时,通过验证证书公钥来判断连接是否可用 final Authenticator proxyAuthenticator; final...返回一个RealCall对象,它是 Call接⼝的实现....所以https请求会有证书相关的验证。 1. 使用CA颁发的证书 okhttp默认情况下是支持https协议的网站的,例如https://www.baidu.com 2....使用自签名证书 需要自己处理证书校验。( 可以选择信任所有证书 或者 自定义证书校验 ) a. 信任所有证书(处理比较粗暴,忽略安全问题,不建议使用) 处理方式可以google查询。有很多介绍 b.
但是一些公司又不想花一笔钱去CA申请证书,所以就采用自签名的证书。...但是如果是你们公司自签名(即自己用keytool生成的证书,而不是采用通过CA认证的证书)的服务器,OkHttp是无法访问的,例如访问12306网站(https://kyfw.12306.cn/otn/...网站接收浏览器发来的数据之后,通过私钥进行解密,然后HASH校验,如果一致,则使用浏览器发来的数字串使加密一段握手消息发给浏览器。 浏览器解密,并HASH校验,没有问题,则握手结束。...握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。 使用OKHTTP请求自签名的https服务器数据 以下我们使用12306网站为例 1....(sslSocketFactory, trustManager) .build(); } catch (IOException e) { e.printStackTrace(); } } /** * 以流的方式添加信任证书
当然自签名证书也是不受信任的。...现在可以看看使用证书是怎么样提高安全性,避免中间人攻击的,用一张简单的流程图来说明: ? 6、HTTPS单项认证 所谓单项认证只要服务端配置证书,客户端在请求服务端时验证服务器的证书即可。...那么此时再遭遇中间人攻击劫持我们的请求时由于黑客服务器没有相应的证书,此时HTTPS请求校验不通过,则无法与黑客的服务器建立起连接。...,否则返回false,检验不通过,断开连接。...收到后,服务器验证客户端的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。 f. 客户端告诉服务器自己所能够支持的通讯对称密码方案。 g.
客户端在进行SSL连接时,JSSE将根据这个文件中的证书决定是否信任服务器端的证书。 ...通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。 ...其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。...HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。...SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。下面用一个图简单表示这几个JSSE类的关系: ?
但是在APP里面就不一样,APP是HTTPS的服务提供方自己开发的客户端,开发者可以先将自己服务器的证书打包内置到自己的APP中,或者将证书签名内置到APP中,当客户端在请求服务器建立连接期间收到服务器证书后...认证方式:证书锁定 证书锁定(SSL/TLS Pinning)顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性...证书锁定需要把服务器的公钥证书(.crt 或者 .cer 等格式)提前下载并内置到App客户端中,创建TrustManager 时将公钥证书加进去。当请求发起时,通过比对证书内容来确定连接的合法性。...认证方式:公钥锁定 公钥锁定则需提取证书中的公钥内置到客户端中,通过比对公钥值来验证连接的合法性,由于证书更换依然可以保证公钥一致,所以公钥锁定不存在客户端频繁更换证书的问题。...若使用配置文件方式可以直接将文件中校验的部分或注释掉,再重新打包和签名即可。 案例一 设置完代理后打开某app提示网络错误无法正常使用。
; (3) 如果信息审核通过,CA会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。...;颁发者和使用者相同,自己为自己签名,叫自签名证书; (4) 证书=公钥+申请者与颁发者信息+签名; 3.HTTPS协议原理 (1) HTTPS的历史 HTTPS协议历史简介: (1) SSL协议的第一个版本由...它通常会携带close_notify异常,在连接关闭时使用,报告错误。...可能是购买的CA证书比较新,Android系统还未信任,也可能是服务器使用的是自签名证书(这个在测试阶段经常遇到)。 ...在本文的第5部分代码实现模块,会详细的讲解如何让Android应用信任自签名证书集合或者跳过证书校验的环节。 (2) 域名验证失败 SSL连接有两个关键环节。
前面说到,当发起 HTTPS 请求时,可能抛起一个异常,以上面说到的代码来看: try { URL url = new URL("https://certs.cac.washington.edu...path not found. ... 16 more 解决方案一 不论是权威机构颁发的证书还是自签名的,打包一份到 app 内部,比如存放在 asset 里。...通过这份内置的证书初始化一个KeyStore,然后用这个KeyStore去引导生成的TrustManager来提供验证,具体代码如下: try { CertificateFactory cf = CertificateFactory.getInstance...解决方案2 同方案1,打包一份到证书到 app 内部,但不通过KeyStore去引导生成的TrustManager,而是干脆直接自定义一个TrustManager,自己实现校验逻辑; 校验逻辑主要包括...: •服务器证书是否过期 •证书签名是否合法 try { CertificateFactory cf = CertificateFactory.getInstance("X.509");
通过单向散列算法对内容进行求值,相当于对内容进行提取了指纹。 CA 证书颁发机构(相当于所有人都信任的一个中间机构),CA机构也有自已的公钥与私钥。...client通过CA机构的公钥与证数中的数字签名来验证证书的合法性。 SSL*(Secure Socket Layer) SSL在网络层所处的位置: ? SSL位置 SSL提供的功能: ?...SSL提供的功能 java keytool Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中...实现SSL通信 通过上面的keytool工具,生成服务端证书。...; import java.net.Socket; import javax.net.SocketFactory; import javax.net.ssl.SSLSocketFactory; public
协议时 , 创建 SSLSocket ; 涉及到 HTTPS 证书信任问题 , 如果证书不收信任 , 会报异常 ; @Nullable SSLSocketFactory sslSocketFactory...; 证书链清洁器 : 使用 HTTPS 协议时 , 使用 Java TSL 相关 API , 获取有效证书 , 清除不相关证书 ; @Nullable CertificateChainCleaner certificateChainCleaner...; 主机名称校验器 : 使用 HTTPS 协议时 , 如果无法识别 URL 中的主机名称 , 就要进行主机验证 ; HostnameVerifier hostnameVerifier; 证书锁 : 使用...HTTPS 协议时 , 约束可以信任的证书 , 防止不受信任的证书的攻击行为 , 如果没有受信任的证书 , 报异常 ; CertificatePinner certificatePinner; 身份认证器...1 个客户端与 1 个服务器之间的连接是 1 个 Connection 连接 ; 这些连接都放在该连接池中 , 统一管理 ; 如果有相同的 HTTP 请求 , 则可以使用连接池中的连接 ; ConnectionPool
整改建议 使用对称加密算法时避免使用DES算法 使用RSA算法加密时不使用NoPadding 在选择加密模式时避免使用ECB模式 使用RSA加密时,建议密钥长度大于1024bit 数据传输测试 敏感信息明文传输...,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。...预期结果:在使用证书的时候进行相关校验 整改建议:建议开发者对SSL证书进行强校验,包括证书是否合法、主机域名是否合法和证书的有效期。...执行步骤 使用adb shell连接设备 进入应用目录cd /data/data/xxxx(包名) 执行命令ls -al,查看当前目录下所有文件权限。...WebView远程代码执行漏洞 安全风险:Webview中接口addJavascriptInterface可通过webview对象向页面javascript导出java本地接口,可能导致任意命令执行。
(CA)的证书,来确认服务器的合法性~ 1.4.2 服务器对客户的身份认证 也可通过公钥技术和证书进行认证,也可通过用户名,password 来认证~ 1.4.3 建立服务器与客户之间安全的数据通道 SSL...客户端中因为在操作系统中就预置了 CA 的公钥,所以支持解密签名 2.证书生成 基本概念讲完之后,我们来实际操作一下证书的生成,博主这边主要使用到了open ssl~ 2.1 生成根证书(CA) 首先,...生成一个自签名的根证书作为根证书颁发机构(CA) 并生成根证书~ 使用 OpenSSL 工具来生成: openssl genrsa -out ca.key 2048 openssl req -x509...填写这些信息时要确保准确性,但在测试环境中可以使用虚拟的信息。...: 密钥和证书必须得到妥善保护,确保只有授权的人能够访问 证书有效期: 在创建证书时,设置适当的有效期限,确保证书在过期之前能够持续有效 证书更新: 定期更新证书以确保安全性。
本文的目的就是要演示Web服务客户端如何通过安全的HTTPS协议使用自签名的安全证书。 使用自签名证书的问题 HTTPS通常可以无缝地与不安全的HTTP协议一起使用,而不中断用户的体验。...通常Web浏览器会显示一个对话框,询问您是否希望信任一个自签名证书。 Web浏览器的这一特性很好,因为当其获得一个由未知认证机构签名的证书时,还有机会进行处理。...在开发用于通过HTTPS进行通信的Web服务客户端时,这就没那么容易了。在运行Java代码时,不会出现询问是否信任一个不可信的认证机构的对话框。...因为该证书是自签名的,所以Web浏览器将显示一个对话框,询问是否信任该连接。如果接受,则所有的通信都将通过HTTPS进行,从而成为安全的。...它在8080端口使用了不安全的HTTP协议。为什么不在8443端口使用HTTPS呢?这是因为自签名证书,WSDL2Java工具将遇到与本文所试图解决的证书问题完全相同的问题。
小编说:本文作者孙卫琴,知名IT作家和Java专家。本文将通过一个范例向大家介绍JSSE是如何实现安全的网络通信的。 ---- 在网络上,信息在由源主机到目标主机的传输过程中会经过其他计算机。...但在使用网上银行或者进行信用卡交易时,网络上的信息有可能被非法分子监听,从而导致个人隐私的泄露。...java.security.cert包:包括处理安全证书的类,如X509Certificate类。X.509是由国际电信联盟(ITU-T)制定的安全证书的标准。...SSLContext.getInstance("SSL"); 38 sslContext.init(kmf.getKeyManagers(), null, null); 39 40 //当要求客户端提供安全证书时...这个SSLContext对象通过TrustManager来管理所信任的安全证书。在本例中,TrustManager所信任的安全证书位于test.keystore密钥库文件中。
套接字 在 OKHttp 中,我们可以找到,如果是 TLS 连接,那么一定会有一个 SSLSocketFactory ,这个类我们一般并不会设置。...如果没有为这个 hostname 固定的证书,则不执行任何操作。okhttp在 TLS 握手之后使用连接之前调用此操作。 那么到底啥是 ssl pinner呢?...我们将客户端的代码中写上只接受指定host的证书,不接受操作系统或者浏览器内置的 CA 根证书对应的任何证书,通过这种方式,保障了客户端和服务端通信的唯一性和安全性。...提取证书中的公钥内置到客户端,通过与服务器端对比公钥值来验证合法性,并且在证书续期后,公钥也可以保持不变,避免了证书锁定的过期问题。...new String(alpnResult, Util.UTF_8) : null; 这里会通过反射调用一些系统方法获取我们需要建立的连接协议。
如今很多APP都开始使用Https请求,以确保数据安全,默认无法拦截https的接口,这时我们就要配置证书。...在你的移动设备上打开连接,或者扫描下面的二维码,下载相应证书,然后安装。...Charles的使用 下载地址百度云链接 密码:5v9y Mac端安装证书 1) 安装证书 Help–>SSL Proxying–>Install Charles Root Certificate安装即可...安装方式参见上文 代码中的配置 Retrofit/okhttp 客户端不对服务器证书做任何验证 public static SSLSocketFactory getSSLSocketFactory...); } catch (Exception e) { e.printStackTrace(); } } 客户端验证证书 public static SSLSocketFactory
本文主要介绍如何在 Java 项目中使用 MQTT,实现客户端与服务器的连接、订阅和收发消息等功能。...Java 语言中使用最为广泛的 MQTT 客户端库。...setAutomaticReconnect: 设置是否自动重连TLS/SSL 连接如果要使用自签名证书进行 TLS/SSL 连接,需添加 bcpkix-jdk15on 到 pom.xml 文件。...): 消息发送完成时被调用测试接下来运行 SubscribeSample,订阅 mqtt/test 主题。...图片至此,我们完成了在 Java 中使用 Paho Java Client 来作为 MQTT 客户端连接到 公共 MQTT 服务器,并实现了测试客户端与 MQTT 服务器的连接、消息发布和订阅。
场景 自签的SSL证书不受信任,可通过将该证书添加至JDK密钥库,jdk信任自签证书,如果这种方法行不通,可尝试该方式 使用代码 /** * Created with IDEA...()); final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(...); OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.sslSocketFactory...() { //这里存放不需要忽略SSL证书的域名,为空即忽略所有证书 String[]ssls = {};...okHttpClient; } catch (Exception e) { throw new RuntimeException(e); } } 使用方法
如果这个证书不是向第三方权威机构申请的,浏览器会提示证书有问题(使用httpclient访问的话会报错)。如果忽略错误,则浏览器接受证书并解密响应,发送的数据也用此密钥加密。...前面说到,如果服务端的证书不是向第三方权威机构申请,使用httpclient访问会报错。解决办法由两种,第一种是将证书导入jre的密钥库的信任列表;第二种是让他不去验证服务端证书。...如果需要双向认证,还需要为httpclient指定客户端需要使用的证书。...; import java.io.FileInputStream; import java.security.KeyStore; import java.security.cert.CertificateException...SSLContext 创建套接字连接工厂,并注册到连接管理器。
我们这里用openssl制作证书,在制作之前先修改配置文件(通过subjectAltName机制),可以让我们的证书支持多个cn或者ip,这样证书放在不同的server上就比较方便了。...一是trust server发过来的证书,这个可以通过把server的证书或者签发server证书的根证书import到client的环境里解决。...(之前遇到有用java的同学只要遇到ssl问题就customize sslsocketfactory,然后trust任何证书,always verify pass,这个虽然管用,但是却有些暴力) 修改...生成自签名ca证书 openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -days 3650 ?...生成docker server证书并用ca证书签名 openssl ca -in docker-server.csr -out docker-server.crt -cert ca.crt -keyfile
支持COOKIE存取的网络库,在存取COOKIE时,从URL中提取的域名通常是key的重要部分。 连接管理。...连接的 Keep-Alive参数,可以让执行HTTP请求的TCP连接在请求结束后不会被立即关闭,而是先保持一段时间。为新发起的请求查找可用连接时,主要的依据也是URL中的域名。...HTTPS的SNI及证书验证。SSL/TLS的SNI扩展用于支持虚拟主机托管。在SSL/TLS握手期间,客户端通过该扩展将要请求的域名发送给服务器,以便可以取到适当的证书。...HostnameVerifier 的 verify() 传回来的域名是url中的ip地址,但我们可以在定制的域名证书验证逻辑中,使用原始的真实的域名与服务器返回的证书一起做验证。...具体而实现上,使用那些可以定制Dns逻辑的网络库,比如OkHttp,或者使用Chromium的网络库基础上做的库,实现域名解析的接口,并在该接口的实现中通过HttpDns模块来执行域名解析。
领取专属 10元无门槛券
手把手带您无忧上云