Labs SD >
Neste exercício vamos acrescentar segurança a uma aplicação distribuída que usa gRPC. Nomeadamente, vamos garantir integridade da comunicação entre servidor e cliente.
... import java.security.Key; import static javax.xml.bind.DatatypeConverter.printHexBinary; import java.io.InputStream; ... public static Key readKey(String resourcePath) throws Exception { System.out.println("Reading key from resource " + resourcePath + " ..."); InputStream fis = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourcePath); byte[] encoded = new byte[fis.available()]; fis.read(encoded); fis.close(); System.out.println("Key:"); System.out.println(printHexBinary(encoded)); SecretKeySpec keySpec = new SecretKeySpec(encoded, "AES"); return keySpec; } ...
... message Signature { string signerId = 1; bytes value = 2; } ...
... message SignedResponse { ProductsResponse response = 1; Signature signature = 2; } ...
... rpc listProducts(ProductsRequest) returns (SignedResponse); ...
... import ... import pt.tecnico.supplier.grpc.SignedResponse; import pt.tecnico.supplier.grpc.Signature; ... @Override public void listProducts(ProductsRequest request, StreamObserver<SignedResponse> responseObserver) { ...
... import ... import pt.tecnico.supplier.grpc.SignedResponse; import pt.tecnico.supplier.grpc.Signature; ... SignedResponse response = stub.listProducts(request); ...
... byte[] responseBytes = response.toByteArray(); ...
... if (Arrays.equals(digest, decipheredDigest)) System.out.println("Signature is valid! Message accepted! :)"); else System.out.println("Signature is invalid! Message rejected! :("); ...
Fénix, Avaliação, Projetos, mini Exercício 3
A solução completa deverá ser submetida no Fénix
antes do fim da sua aula de laboratório.
Trabalhos submetidos depois da hora de fim da aula não serão
considerados.
Ter atenção ao seguinte:
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Técnico Lisboa