一尘不染

相互认证Android和Tomcat

tomcat

我想为我的应用程序和服务器进行双向身份验证。我遵循以下步骤:

1)创建一个certf。和服务器tomcat的密钥库(tomcat.keystore)

2)创建一个certf。为客户

3)导入客户端证书。进入服务器密钥库

4)为Android创建一个bks密钥库(smartssl.bks)

5)导入证书。服务器和客户端进入密钥库Android

现在我用以下命令配置Tomcat:

<Connector SSLEnabled="true" clientAuth="true"
            keystoreFile="/home/antonio/Documenti/keystore/tomcat.keystore"
            keystorePass="pass" maxThreads="150" port="8443" scheme="https"
            secure="true" sslProtocol="TLS"
            truststoreFile="/home/antonio/Documenti/keystore/tomcat.keystore"
            truststorePass="pass" />

在Android应用中,我使用Volley这样的框架:

 InputStream keyStore = getResources().openRawResource(R.raw.smartssl);

                // Usually getting the request queue shall be in singleton like in {@see Act_SimpleRequest}
                // Current approach is used just for brevity
                RequestQueue queue = Volley
                        .newRequestQueue(Act_SsSslHttpClient.this,
                                         new ExtHttpClientStack(new SslHttpClient(keyStore, "pass", 443)));

                StringRequest myReq = new StringRequest(Method.GET,
                                                        "https://192.168.1.4:8443/REST/app/generali/getA",
                                                        createMyReqSuccessListener(),
                                                        createMyReqErrorListener()){
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    return createBasicAuthHeader("user", "strongpassword");
                }};

                queue.add(myReq);
            }
        });

使用此配置。我有这个错误:

no peer certificate

如果我尝试通过以下方式更改Tomcat配置:

clientAuth="false"

可行,所以问题出在bks文件中?还是在哪里?


阅读 213

收藏
2020-06-16

共1个答案

一尘不染

我通过在应用程序中解决BKS中的密钥库和信任库来解决。

这里有创建自我证书的指南:

为客户端和服务器创建自我证书

这是与Volley进行相互身份验证的类示例:

相互认证TLS /
SSL的示例类

类SSLSocket

2020-06-16