我想为我的应用程序和服务器进行双向身份验证。我遵循以下步骤:
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文件中?还是在哪里?
我通过在应用程序中解决BKS中的密钥库和信任库来解决。
这里有创建自我证书的指南:
为客户端和服务器创建自我证书
这是与Volley进行相互身份验证的类示例:
相互认证TLS / SSL的示例类
类SSLSocket