Requirement
Client端在发送请求时,没有做user的authentication,显然这样不符合安全要求。结合客户端的特点-是设备自动发送,所以提出要用mTLS去验证客户端的身份信息来达到对客户的验证。
目前Server端里边起了一个embedded jetty server, 并且在client端在连接时会要求验证client的证书,并且要求把验证的结果以log形式存起来,包括证书的DN信息。
Analysis
证书方面,服务器端jetty要加载keystore.jks,里边包括server端的private key,还要加载truststore.jks,里边包括认证client证书的CA证书,如果是由intermediate CA认证的话,那么所有CA chain 都要包括在truststore里,还有client的证书。客户端在请求的时候要带上自己的私钥公钥,这取决于client端访问的形式。
jetty方面,在生成Connector的时候要加载keystore, truststore,还要setNeedClientAuth为true才能去触发对client证书的验证。还有就是要获取client证书验证的结果,有一个listener的接口,在验证结束后会把结果notify的这类的是实现上。
下面是jetty server的代码例子,在connector上加了一个SSLHandshakeListener的实现。
Server server = new Server();
// === Configure SSL KeyStore, TrustStore, and Ciphers ===
SslContextFactory