Boa tarde a todos!
estou tentando baixar o certificado pela verisign e nao estou conseguindo.
Consegui gerar um certificado, pelo jdk um .csr. Mas quando tento gerar o da verisign ta dando erro.
me disseram q tinha q ser um .keystore e nao um .csr como gerei.
alguem tem algum caminho de como gerar isso?
configurei o certificado que gerei no tomcat e beleza. Meu serviço é acessado via https, quando vou fazer meu cliente enviar mensagem para meu serviço estoura um erro do validador de certificado, como se nao fosse valido (algo como o nivel menor que o exigido)
abraços
CONSEGUI!!!
Enfim, gerei um certificado digital para meu Web Services.
Como não foi tudo através de uma única referência, no lugar de colocar um monte de links aqui (que por sinal são todos em inglês), vou gerar um passo-a-passo, em português, de como gerar e instalar o certificado digital (SSL) e como definir no seu web container (TOMCAT ou JBOSS, no meu caso) a utilização deste certificado.
Ai sim, devo terminar hoje mesmo. E já posto aqui a solução,.
se for possível, posso até colocar como artigo aqui.
abraços a todos. Qq dúvida, estamos aqui para ajudar.
Galera o passo-a-passo que falei esta quase pronto. É que estou com o tempo apertado, pois to fazendo um Compilador que ta me tirando o sono.
Tô com uma dúvida sobre SSL que se alguém puder me esclarecer, eu agradeço muito.
é o seguinte:
gerei um certificado trial pela verisign, apenas como teste, e fiz meu web services ser acessado via https. Uma coisa que não entendi foi o seguinte:
meu cliente só consegue enviar arquivos para meu serviço se eu der a meu cliente o meu certificado. Quando executo meu cliente tenho que estar com o certificado digital do serviço na máquina e passar o arqumento com o caminho do certificado. Caso contrário ele explode exceções dizendo que deu erro na validação do certificado e por ai.
Sabem me dizer o porque disso?
abraços
Como o certificado é “trial” ele foi emitido por uma autoridade certificadora que não está presente no banco de dados que contém as autoridades certificadoras (você não disse se seu cliente usa .NET ou Java, mas é mais ou menos a mesma coisa - só ficam em lugares diferentes.)
Você teria de usar um certificado “de verdade” e ver se a autoridade certificadora raiz está presente na lista de autoridades certificadoras confiáveis.
valeu thingol.
outra coisa,
criei agora um certificado gerando pelojdk mesmo, através da ferramenta keytool. Agora meu cliente só consegui enviar a mensagem para meu web service se eu der a ele minha chave privada .keystore para que ele passe pelo vmargs.
Testei exportando uma chave publica pelo comando keytool -export e n funcionou, explode as excessoes de erro no certificado de novo.
sabe algo sobre isso?
Queria fazer uma pergunta. O seu cliente do Web Service é em Java ou em .NET? (Ou em VB 6.0 mesmo
)
É que é útil saber esses “detalhes sangrentos”.
É Java mesmo.
Aqui só uso java pra tudo.
gerei um certificado através do keytool do jdk e estou setando no server.xml o certificado.keystore (q é minha chave privada). Exporto a chave publica e mando meu cliente enviar o arquivo usando a publica e n funciona, só vai se o cliente usar a chave privada.
Quando você usa os Web Services não deveria ter um certificado (com chave privada) para o cliente e outro para o servidor? Não é isso que (talvez) esteja dando problema?
O correto, se você vai usar certificados de teste, é o seguinte:
- Cadastrar uma autoridade certificadora (mesmo que seja de teste) no keystore do cliente e do servidor (algo como keytool -import -trustcacerts )
- O cliente deve ter um certificado emitido por essa autoridade certificadora, assim como o servidor (mas aí as chaves privadas são diferentes)
- Como ambos os certificados são “válidos” (ou seja, emitidos por certificadoras “trusted”) então deveria funcionar tudo OK
-
E além disso, poderia imprimir qual é a tal “exception” que explode? Por lá dá para ter uma idéia aproximada do que está ocorrendo, afinal.
thingol, gerei o certificado.jks e exportei a publica certificado.x509, setei o certificado.jks no server.xml do TOMCAT e na hora de executar meu cliente passei
-Djavax.net.ssl.trustStore=c:\certificados\certificado.x509 (q é minha chava pública) e explode a seguinte exceção:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:192)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:92)
at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invokeTransport(AxisClient.java:150)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:289)
at org.apache.axis.client.Call.invokeEngine(Call.java:2838)
at org.apache.axis.client.Call.invoke(Call.java:2824)
at org.apache.axis.client.Call.invoke(Call.java:2501)
at org.apache.axis.client.Call.invoke(Call.java:2424)
at org.apache.axis.client.Call.invoke(Call.java:1835)
at localhost.axis.ScmbaTissService_jws.ScmbaTissServiceSoapBindingStub.gravaArquivo(ScmbaTissServiceSoapBindingStub.java:183)
at cliente.ClienteArquivoService.main(ClienteArquivoService.java:34)
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
... 15 more
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1185)
at com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl.getCacertsKeyStore(TrustManagerFactoryImpl.java:202)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultTrustManager(DefaultSSLContextImpl.java:70)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 22 more
{http://xml.apache.org/axis/}hostname:Desen-07
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at org.apache.axis.AxisFault.makeFault(AxisFault.java:104)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invokeTransport(AxisClient.java:150)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:289)
at org.apache.axis.client.Call.invokeEngine(Call.java:2838)
at org.apache.axis.client.Call.invoke(Call.java:2824)
at org.apache.axis.client.Call.invoke(Call.java:2501)
at org.apache.axis.client.Call.invoke(Call.java:2424)
at org.apache.axis.client.Call.invoke(Call.java:1835)
at localhost.axis.ScmbaTissService_jws.ScmbaTissServiceSoapBindingStub.gravaArquivo(ScmbaTissServiceSoapBindingStub.java:183)
at cliente.ClienteArquivoService.main(ClienteArquivoService.java:34)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:179)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:192)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:92)
at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
... 12 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
... 15 more
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1185)
at com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl.getCacertsKeyStore(TrustManagerFactoryImpl.java:202)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultTrustManager(DefaultSSLContextImpl.java:70)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 22 more
lendo aqui me gerou uma dúvida sobre a geração da chave pública.
meu procedimento todo de criação das chaves são esses:
keytool -genkey -alias tomcat -keyalg RSA -keypass senha -storepass senha -keystore c:/certificados/certificado.jks -dname "cn=tomcat, ou=Teste, o=grupoTeste, l=salvador, s=ba, c=br" -validity 365
e para o que seria a extração da chave pública é:
keytool -export -alias tomcat -keystore c:/certificados/certificado.jks -file c:/certificados/certificado.x509
Estou errando em algo? Vi falar sobre ter que importar algo para o certificado.
[só funciona se passar o certificado.jks se passar o certificado.x509 explode essa exceção acima]
O “trustStore”, como o nome diz, não pode ser um certificado, e sim um keystore.
onde eu acho um material legal que me explique isso de trutstore, keystore… ???
Já tô te incomodando demais neh meu velho…
me explica uma coisa:
o que vem a ser o trutstore? como eu faço para extrair ele de meu certificado para poder usar na chamada do meu cliente a meu serviço??
O truststore é um keystore que contém apenas certificados de autoridades certificadoras válidas.
Um exemplo é o arquivo cacerts que vem com o JDK e pode ser modificado, se quiser. (senha: “changeme”).
valeu thingol, mais uma vez.
ja fiz o orçamento dos certificados digitais, de acordo com minha necessidade, e amanha daremos inicio ao processo de compra do certificado.
Acho que terei menos problemas do que tive com o certificado trial.
abraçao e boa noite man.
Cara estou com algumas dúvidas a respeito de certificado também…
O certificado do servidor precisa ser salvo no cliente? preciso colocar ele no meu keystore?
Como funciona exatemente os certificados servidor e cliente?
abraços