Database
 sql >> Base de Dados >  >> RDS >> Database

Uma introdução à API de segurança Java


A segurança é uma das partes mais importantes do desenvolvimento de aplicativos. A linguagem Java facilita o desenvolvimento de aplicativos seguros, fornecendo muitas opções e recursos que tornam os aplicativos seguros. Por ser um grande tópico, este artigo abordará alguns aspectos-chave dos recursos de segurança e APIs disponíveis na plataforma Java.

Visão geral


A plataforma Java, desde o início, é construída tendo a segurança em mente. A propriedade type safe da linguagem e coleta de lixo automática afirma que a arquitetura Java tentou absorver recursos de segurança diretamente de seu núcleo.

Nos últimos anos, a segurança tem sido um foco importante. Por exemplo, os navegadores modernos estão trabalhando para restringir ou reduzir o suporte a plug-ins como Java, Silverlight e Flash porque eles podem ser mal utilizados para incorporar códigos maliciosos em um complemento de aparência inofensiva. Embora o ambiente Java seja limpo, a natureza do applet é que ele baixa códigos não confiáveis ​​da rede pública. Isso pode ser uma grande violação de segurança. Além disso, o mundo dos navegadores mudou significativamente nos últimos anos. A necessidade absoluta de Applet tornou-se quase obsoleta. Talvez isso e principalmente a crescente preocupação com a segurança tenham tornado o Applet obsoleto do Java 9.

Estrutura de segurança Java


Os serviços de segurança Java se expandiram e incluem um grande conjunto de interfaces de programação de aplicativos (APIs), ferramentas, várias implementações de algoritmos de segurança, mecanismos e protocolos. Isso fornece um ambiente abrangente para desenvolver aplicativos seguros e gerenciá-los adequadamente.

A extensão da API de segurança Java é extensa. A base do desenvolvimento de um aplicativo seguro está nas interfaces de infraestrutura criptográfica e de chave pública (PKI), várias implementações algorítmicas comuns interoperáveis ​​e outros serviços de segurança. Existem interfaces para realizar autenticação e controle de acesso. Isso permite que os aplicativos se protejam contra o acesso não autorizado a recursos protegidos.

Segurança do idioma


Para começar, a própria linguagem é construída com a preocupação de incorporar a segurança em seu núcleo. O exemplo mais simples talvez seja a incorporação da segurança de tipo. Digite seguro significa que os programas têm acesso restrito à memória em tempo de execução. Isso é obtido associando memória apenas a objetos Java. Os objetos possuem uma classe correspondente que define seu comportamento; isso garante que o programa possa agir sobre ele apenas de acordo com o comportamento definido. Essa ideia ressoa com a verificação de tipo dinâmico, mas Java também incorpora verificação de tipo estático complexa sempre que possível para sucumbir à limitação de sua contraparte dinâmica. Por exemplo, o verificador de código de byte é um verificador de tipo estático eficaz empregado em tempo de compilação para detectar qualquer tipo de erro e relatar proativamente ao desenvolvedor. O verificador de bytecode garante que um bytecode legítimo seja executado em conformidade com a Java Language Specification. Além disso, ele também verifica violação de memória, stack under/overflow, typecasts apropriados e assim por diante. Além disso, existem modificadores como private, protected e public para afirmar o acesso restrito.

Provedores de segurança


Os serviços atuam como um provedor de segurança. Eles, quando conectados à plataforma Java por meio de interfaces padrão, facilitam para o aplicativo obter serviços de segurança. A vantagem desse mecanismo é que o desenvolvedor não precisa conhecer os detalhes intrincados e, em vez disso, pode se concentrar na integração dos recursos de segurança ao aplicativo. Essa ideia é encapsulada na classe abstrata chamada java.security.Provider . O serviço de segurança é obtido através do getInstance() método fornecido pelo Provedor . Pode haver muitos provedores configurados onde cada um tem um nome e um número de versão configurado em cada tempo de execução em que está instalado. Por exemplo, um programa pode obter um algoritmo de resumo de mensagem específico solicitando opcionalmente um provedor específico por seu nome da seguinte maneira:
MessageDigest messageDigest = MessageDigest.getInstance("MD5",
   "MyProvider1");

Criptografia


As APIs criptográficas Java são distribuídas entre dois pacotes:java.security e javax.crypto . Java fornece uma grande variedade de serviços criptográficos implementando vários algoritmos criptográficos. Alguns deles são os seguintes:
  • java.security.MessageDigest: Essa classe fornece a implementação de uma função de hash unidirecional que recebe dados de tamanho arbitrário e gera um valor de hash de comprimento fixo. O algoritmo é denominado SHA-1 ou SHA-256.
  • java.security.Signature: Essa classe é usada para fornecer a funcionalidade de um algoritmo de assinatura digital, como algoritmos DSA, RSA ou DSA, usando o algoritmo de resumo de mensagem SHA-256. Uma assinatura digital é usada especialmente para garantir a integridade e autenticidade dos dados digitais.
  • java.security.SecureRandom: Esta classe fornece funcionalidade para gerar um número aleatório criptograficamente forte.

Infraestrutura de chave pública (PKI)


A infraestrutura PKI permite a troca segura de dados usando criptografia de chave pública. Ele engloba chaves, certificados, criptografia de chave pública e certificados digitais. As classes relacionadas à PKI são armazenadas em java.security e java.security.cert pacotes.

Autenticação


Autenticação é o processo de verificação da identidade do usuário. Java permite que o aplicativo execute a autenticação do usuário com a ajuda do módulo conectável. Existe uma classe chamada LoginContext no javax.security.auth.login pacote. Esta classe é instanciada com um nome e um CallbackHandler. O LoginContext usa o nome como um índice para a configuração. A configuração determina o LoginModule específico (javax.security.auth.spi.LoginModule ). O CallbackHandler é passado para o LoginModule para solicitar nome de usuário e senha, em uma GUI, por exemplo.

Comunicação segura


A plataforma Java implementa protocolos SSL e TLS que fornecem funcionalidade para integridade de mensagens, criptografia de dados e autenticação de cliente e servidor. Isso pode ser usado para pavimentar uma passagem segura de comunicação de dados entre pares em cima do protocolo HTTP ou TCP/IP. O suporte da API para a implementação pode ser encontrado em javax.net.ssl pacote. Existem muitas classes de apoio; por exemplo, o SSLSocket class é uma extensão do java.net.Socket class para fornecer um soquete seguro usando o protocolo SSL/TLS. Isso nada mais é do que um soquete de fluxo normal com uma camada adicional de proteção sobre o protocolo da camada de transporte (TCP).

Controle de acesso


A classe de controle de acesso protege o acesso a recursos confidenciais, como arquivos locais. O java.lang.SecurityManager classe media todo o acesso. Essa classe permite que o aplicativo implemente uma política de segurança. Portanto, uma possível operação insegura pode ser restringida na tentativa, assim o aplicativo tem controle total sobre as operações permitidas.

Conclusão


Este é um tour rápido pelos recursos, funcionalidades e APIs de segurança da plataforma Java. Java fornece suporte abrangente para implementar segurança em um aplicativo em que os desenvolvedores podem estar alegremente inconscientes das complexidades envolvidas na implementação, mas ainda assim colher seus benefícios. Isso alavanca a entrega rápida e eficiente do produto sem ter que construir tudo do zero.

Referências

  • Documentação da API Java
  • Visão geral da segurança Java