Usando e criando DNSs locais em seu ambiente de desenvolvimento

Você precisa estar usando o NetworkManager como gerenciador de conexões. Altere o NetworkManager para usar o dnsmasq-base como dns resolver.

O dnsmasq-base é uma versão mais leve do dnsmasq que já vem instalada no Debian e no Ubuntu. Por padrão ela vem desabilitada pois o DNS server padrão destas distribuições é o systemd-resolved. O dnsmasq é superior pois permite configurar entradas DNS facilmente. O principal ponto dele é de poder criar DNS wildcards manuais, o que é impossível apenas editando o arquivo hosts.

# Instale o dnsmasq-base (isso se ele já não estiver instalado)sudo apt install dnsmasq-base

# Faça o network manager usar o dnsmasq como dns resolversudo sh -c 'echo "[main]dns=dnsmasq" > /etc/NetworkManager/conf.d/dnsmasq.conf'

# Crie seus DNSs dentro da pasta /etc/NetworkManager/dnsmasq.d/sudo sh -c 'echo "address=/mydomain.local/127.0.0.1" > /etc/NetworkManager/dnsmasq.d/local.conf'

Para fazer um "wildcard" dns, use:

address=/.mydomain.local/123.123.123.123# Preste atenção no primeiro ponto!

Reinicie o NetworkManager para forçar as mudaças no DNS.

sudo systemctl restart NetworkManager

Adicionando um certificado auto assinado no Linux

Para adicionar um certificado auto assinado no Linux você precisa do arquivo .crt (.pem). Esse arquivo deve ser um certificado de CA.

Certificado auto assinado no linux opção 1 - /usr/local/share/ca-certificates/

Coloque no arquivo.

mv abc.crt /usr/local/share/ca-certificates/

Certificado auto assinado no linux opção 2 - /etc/ssl/certs/

Essa opção serve quando se tem o OpenSSL instalado no sistema.

mv abc.crt /etc/ssl/certs/

ou adicione no final do arquivo ca-certificates.crt

cat abc.crt >> /etc/ssl/certs/ca-certificates.crt

Certificado auto assinado no Mozilla Firefox

Se você usará o website com o Firefox, entre em:

about:preferences#privacy

View certificates -> Authorities -> Import

Importe o certificado desejado e habilite-o para ser usado na identificação de websites.

Os certificados são salvos em um arquivo cert8.db nas pastas de configuração do Firefox.

Certificado auto assinado no Google Chrome

chrome://settings/certificates
Authorities
Import
Importe o certificado desejado
Adicione as permissões de website

Tutorial
https://support.securly.com/hc/en-us/articles/206081828-How-to-manually-install-the-Securly-SSL-certificate-in-Chrome

Opção Java - ferramenta keytool

O keytool funciona para permitir certificados auto assinados no Java.

Cada instalação do Java (OpenJDK, OracleJDK, JavaSE, AdoptOpenJDK) possui seu próprio arquivo de certificados. Para descobrir onde está o arquivo, use o comando:

find -L /usr/lib/jvm/pasta-do-jdk-desejado/ -name "cacert*"

Guarde o caminho deste arquivo. Adicione o certificado ao arquivo de certificados do seu JDK desejado:

sudo keytool -import -v -trustcacerts -alias nome_do_ca_desejado -file /home/usuario/certificado-desejado.crt -keystore /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/lib/security/cacerts -keypass changeit

-import ou -importcert é o parâmetro para fazer o keytool entrar em modo de importação de certificados (CA, Client, Server...).

-v após o -import diz ao keytool para imprimir o maximo de informações de log possível.

-alias dá um apelido ao certificado.

-file é o arquivo de certificado que deseja importar.

-keystore é o arquivo com vários certificados, para onde deseja exportar.

-keypass é a senha usada para editar e abrir o arquivo. Por padrão a senha é changeit. Se você não informa-la ela será pedida interativamente.

keytool -import -v -trustcacerts-alias server-alias -file server.cer-keystore cacerts.jks -keypass changeit-storepass changeit

keytool -import -v -trustcacerts -alias ss_ubivis -file /home/tiago/Desktop/ss_ubivis_ca.crt -keystore /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/lib/security/cacerts --keypass

Resposta no StackOverflow que ajudou
https://stackoverflow.com/questions/21076179/pkix-path-building-failed-and-unable-to-find-valid-certification-path-to-requ

Exemplo de erro que dá quando o certificado não é reconhecido pelo java:

Erro que dá quando o certificado não é conhecidohelloURL : https://haproxy.ubivis.lh/Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)	at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:352)	at sandbox.Https_requestKt.main(https-request.kt:19)	at sandbox.Https_requestKt.main(https-request.kt)Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)	at sun.security.validator.Validator.validate(Validator.java:262)	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:330)	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:237)	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:132)	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)	... 15 moreCaused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target	at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)	... 21 more

Após adicionar o certificado correto, seu código não receberá mais essa exceção.

Bônus - Certificado auto assinado Wildcard

Ao criar um certificado de servidor HTTPS você pode criar um servidor wildcard (um certificado que sirva para todas as cominações de certificados abaixo do seu) preenchedo os seguintes parâmetros do certificado:

commonName = *.seudominio.com

X509v3 Subject Alternative Name = DNS:*.seudominio.com

In general, if the certificate is only going to be used for securing subdomains of "example.com", including the domain itself as a SAN may not be necessary. But if there is any chance that the certificate might be used for the domain itself or other related domains, it's best to include them as SANs to ensure that the certificate is valid for all the domains that it needs to cover.

Referências

Usando um servidor DNS local para seus projetos no Linux com dnsmasq
https://dev.to/brpaz/setup-a-local-dns-server-for-your-projects-on-linux-with-dnsmasq-blm

Como criar um domínio wildcard local?
https://askubuntu.com/questions/1029882/how-can-i-set-up-local-wildcard-127-0-0-1-domain-resolution-on-18-04?rq=1

Como criar um wildcard local?
https://serverfault.com/questions/118378/in-my-etc-hosts-file-on-linux-osx-how-do-i-do-a-wildcard-subdomain/118589#118589

Documentação Debian - dnsmasq
https://wiki.debian.org/dnsmasq

NetworkManager ignorando auto DNS
https://serverfault.com/questions/905903/networkmanager-dnsmasq-ignore-auto-dns-settings

Lidando com SSL/TLS

Pastas de certificados no Linux
https://serverfault.com/questions/62496/ssl-certificate-location-on-unix-linux

You should also read:

Instalando e usando o WebWhatsAPI

É preciso usar exatamente a versão selenium/standalone-firefox-debug:3.14.0-curium (ao usar versões mais novas você receberá um erro). sudo docker run -d -p 4444:4444 -p…

Usando CouchDB com PostgreSQL

FDW usando o Multicorn https://github.com/mdaparte/couch-fdw Usando cliente HTTP no PostgreSQL https://github.com/pramsey/pgsql-http Streaming do CouchDB para PostgreSQL usando NodeJS https://github.com/sysadminmike/couch-to-postgres FDW bem antigo e…