keywords:
android https 双向认证
android GRPC https 双向认证
ManagedChannel channel = OkHttpChannelBuilder.forAddress("xxx",yyy)
.overrideAuthority("zzz")
.sslSocketFactory(sslFactory)
.build();

1、千万不要像官网案例那样设置setPlaintext(true),这个是设置明文,我们用的是密文

2、xxx是服务器的ip,yyy是端口号,zzz是domain(这些参数服务端都会提供给你)
特别注意这个overrideAuthority一定要调用,覆盖hostname来匹配服务器的证书

3、sslSocketFactory这个方法就是设置密钥的方法。一般服务端会提供个.pem的密钥文件,放在raw中。我们把这个密钥设置到OkHttpChannelBuilder中即可以访问服务器了,关于sslSocketFactory 网上可以搜索到很多有关的内容。

cert files gen:
# Generates client.crt which is the clientCertChainFile for the client (need for mutual TLS only)
openssl x509 -passin pass: -req -days -in client.csr -CA ca.crt -CAkey ca.key -set_serial -out client.crt
echo Remove passphrase from client key:
openssl rsa -passin pass: -in client.key -out client.key
echo Converting the private keys to X.:
# Generates client.pem which is the clientPrivateKeyFile for the Client (needed for mutual TLS only)
openssl pkcs8 -topk8 -nocrypt -in client.key -out client.pem
# Generates server.pem which is the privateKeyFile for the Server
openssl pkcs8 -topk8 -nocrypt -in server.key -out server.pem

refs:

gRPC Android SSL/TLS Demo(Android上带有SSL/TLS加密的gRPC使用详解)
https://www.jianshu.com/p/2873a8349ca0

src demo:
https://github.com/grpc/grpc-java/blob/015b2fffa31995ff7923b4076f9324d464b7d827/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/TesterOkHttpChannelBuilder.java

grpc android mutual tls, how to send client certificate and key to server #3887
https://github.com/grpc/grpc-java/issues/3887

OkHttpChannelBuilder API Doc
https://grpc.io/grpc-java/javadoc/io/grpc/okhttp/OkHttpChannelBuilder.html#sslSocketFactory-javax.net.ssl.SSLSocketFactory-

NettyServerBuilder API Doc
https://grpc.io/grpc-java/javadoc/io/grpc/netty/NettyServerBuilder.html#sslContext-io.netty.handler.ssl.SslContext-

https://github.com/grpc/grpc-java/tree/master/examples/example-tls

 

Aandroid中https请求的单向认证和双向认证
https://blog.csdn.net/u011394071/article/details/52880062

基于Retrofit实现HTTPS思路
由于Retrofit是基于OkHttp实现的,因此想通过Retrofit实现HTTPS需要给Retrofit设置一个OkHttp代理对象用于处理HTTPS的握手过程。代理代码如下:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(SSLHelper.getSSLCertifcation(context))//为OkHttp对象设置SocketFactory用于双向认证
.hostnameVerifier(new UnSafeHostnameVerifier())
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://10.2.8.56:8443")
.addConverterFactory(GsonConverterFactory.create())//添加 json 转换器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加 RxJava 适配器
.client(okHttpClient)//添加OkHttp代理对象
.build();

Android HTTPS 自制证书实现双向认证(OkHttp + Retrofit + Rxjava)
https://www.jianshu.com/p/64172ccfb73b


# gen client.p12

openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name tomcat -CAfile ca.crt -caname root -chain

上面代码的目的是将 client.crt 和 client.key转换成 client.p12。.p12格式就是pkcs12的后缀。
然后结合第二个链接的结尾那块所讲,把.p12格式转换成.bks

PS: 生成client.p12时,会输入密码,我们要记住这个密码,后面用得到

# gen client.pem
openssl pkcs8 -topk8 -nocrypt -in client.key -out client.pem

已有ca.crt,ca.csr 和ca.key ,怎么才能创建客户端的cer 和pem?

服务器端已被同样的ca证书签署过。

我自己经过如下步骤:

1.生成客户端key
openssl genrsa -out client-key.key 1024

2.生成客户端请求文件
openssl req -new -out client-req.csr -key client-key.key

3.生成客户端证书(root证书,rootkey,客户端key,客户端请求文件这4个生成客户端证书)
openssl x509 -req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650

4.生成客户端p12格式根证书
openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12

5. 生成pem证书
openssl pkcs12 -in client.p12 -nocerts -nodes -out client.pem

Android Https双向认证 + GRPC的更多相关文章

  1. Https双向认证Android客户端配置

    Https .cer证书转换为BKS证书 公式https://blog.csdn.net/zww986736788/article/details/81708967 keytool -importce ...

  2. 基于java的https双向认证,android上亦可用

    From: http://my.oschina.net/jjface/blog/339144 概述: 客户端,浏览器或者使用http协议和服务器通信的程序. 如: 客户端通过浏览器访问某一网站时,如果 ...

  3. HTTPS 双向认证构建移动设备安全体系

    HTTPS 双向认证构建移动设备安全体系 对于一些高安全性要求的企业内项目,我们有时希望能够对客户端进行验证.这个时候我们可以使用Https的双向认证机制来实现这个功能. 单向认证:保证server是 ...

  4. Tomcat 配置 HTTPS双向认证

    Tomcat 配置 HTTPS 双向认证指引说明: � 本文档仅提供 Linux 操作系统下的指引 � 在阅读本指引前请您在 Linux 部署 JDK 和 Tomcatserver为了 Tomcat ...

  5. httpd设置HTTPS双向认证

    去年用tomcat.jboss配置过HTTPS双向认证,那时候主要用的是JDK自带的keytool工具.这次是用httpd + openssl,区别比较大 在网上搜索了很多文章,发现全面介绍的不多,或 ...

  6. 双向认证 HTTPS双向认证

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 HTTPS双向认证使用说明 ...

  7. https双向认证訪问管理后台,採用USBKEY进行系统訪问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录

    近期项目需求,须要实现用USBKEY识别用户登录,採用https双向认证訪问管理后台管理界面,期间碰到过一些小问题,写出来给大家參考下. 1:前期准备工作 USBKEY 硬件:我买的是飞天诚信 epa ...

  8. nodejs之https双向认证

    说在前面 之前我们总结了https的相关知识,如果不懂可以看我另一篇文章:白话理解https 有关证书生成可以参考:自签证书生成 正题 今天使用nodejs来实现https双向认证 话不多说,直接进入 ...

  9. SpringBoot服务间使用自签名证书实现https双向认证

    SpringBoot服务间使用自签名证书实现https双向认证 以服务server-one和server-two之间使用RestTemplate以https调用为例 一.生成密钥 需要生成server ...

随机推荐

  1. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...

  2. Shell-匹配FTP文件名

    想弄个脚本,下载每日构建的版本,由于版本文件名中有构建时间(不是固定值),只能按日期确认文件名,例如:project_name_2019-01-04*.exe 搜索了下,可以用dir filename ...

  3. Vue.js 子组件的异步加载及其生命周期控制

    前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...

  4. python多线程并发

    # coding=utf8 # 使用前需安装net-snmp-utils或net-snmp包 from _utils.patrol2 import run_cmd import sys import ...

  5. 020_nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题

    由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...

  6. webpack配置的基本介绍

    https://github.com/DDFE/DDFE-blog/issues/10 全局安装 webpack :(当前笔记版本: webpack  3.10.0 , mac环境) 1. npm i ...

  7. MS SQL Server 增删改查

    数据插入 语法:INSERT INTO Table_name(field1,field2……fieldN) values(value1,vlaue2,…valueN) 单行插入用户类型 INSERT ...

  8. MySQL将查询出来的一组数据拼装成一个字符串

    1 前言 由于项目中有一个需求,需要把当日当周的排行榜数据归档,以便后期查询和发放奖励.然而发现,mysql的变量只能存一个变量值,然后如果要储存一条记录,可以使用CONCAT_WS,如果要储存多条记 ...

  9. Windows平台下,Java性能分析工具VisualVM的Tomcat8的配置

    VisualVM在JDK6版本及以上已经自带这个应用. 位置:C:\Program Files (x86)\Java\jdk1.8.0_60\bin\jvisualvm.exe   在Windows环 ...

  10. oracle数据库链路和同义词

    Oracle数据库链路的建立和使用 先来一个例子: --创建数据库链路create   public   database link xaffdblink connect to zdcl identi ...