Portál AbcLinuxu, 13. května 2025 20:15

Dotaz: Openfire a SSL certifikát

23.6.2010 16:28 pnemec | skóre: 8 | blog: jotter
Openfire a SSL certifikát
Přečteno: 2004×
Odpovědět | Admin
Snažím se rozchodit openfire s SSL certifikátem. Těch možností je několik a musel jsem nakonec vyzkoušet všechny abych zjistil že zřejmě něco dělám špatně v každé z nich.

Moje situace je taková, že jsem si vytvořil vlastní CA, její certifikát cacert.pem, její privátní klíč cacert.key. Prošel jsem přes základní návod: http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/ssl-guide.html

Který ani nejde dokončit (podpis csr a převod crt na DER typ pro keytool). Nalezl jsem lepší popis: http://www.igniterealtime.org/community/message/192315#192315

Ve kterém chybý samostatný podpis csr. Ten jsem nalezl zde: http://www.herongyang.com/crypto/OpenSSL_Signing_keytool_CSR_6.html (mimochodem velmi pěkný návod)

Bohužel nakonec vždy zkončím s java.security.InvalidKeyException: Supplied key (null) is not a RSAPrivateKey instance

Jiná cesta, přes grafické rozhraní a certifikát vygenerovaný pomocí gui pak nejsem schopen vložit podepsaný certifikát, Žádné logy nic.

Pro jistotu uvedu celý postup. Mám ca certifikát (vytvořený pomocí YaSTu) cacert.pem a klíč cacert.key
keytool -import -keystore keystore -alias cacert -file cacert.pem
keytool -genkey -keystore keystore -alias example-rsa -keyalg RSA
keytool -certreq -keystore keystore -alias example-rsa -file example-rsa.csr -keyalg RSA

openssl x509 -req -in example.csr -CA cacert.pem -CAkey cacert.key -out example.crt -days 365 -CAcreateserial

openssl x509 -in example.crt -inform PEM -out example.crt.der -outform DER

keytool -import -keystore keystore -alias example-rsa -file example.com-rsa.crt.der -keyalg RSA

Takže pokud má prosím někdo zkušenosti s openfire a SSL certifikáty a ví jak na to...sem s tím.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.6.2010 17:28 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opravdu potřebujete vlastní CA? Nestačil by vám self-signed certifikát vytvořený přes keytool -genkeypair?

Tu výjimku vám vypisuje co? Keytool, nebo až OpenFire?
23.6.2010 22:21 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
No. Chtěl jsem mít vlastní CA, protože stejně musím přidat podepsané certifikáty do dalších aplikací (bacula...). Ale v tuto chvíli by mi stačilo cokoliv. selfsigned certifikát jsem v dokumentaci openfire nenalezl. Můžu to ale zkusit.

Tuto chybovou hlášku hodí až openfire. Skutečně nevím, jestli vůbec zkusí z kestore certifikát najít nebo ne. Při pokusech jsem zjistil že jí hází i když je keystore úplně prázdný. Nicméně v návodu víše zmíněném by tuto hlášku měl odstranit právě trik s podepsáním a převedením pomocí openssl.

Máte zkušenosti s openfire₊SSL ?
24.6.2010 07:55 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Zkuste si ten vytvořený keystore pomocí keytool -list -v vypsat, zda tam certifikát s privátním klíčem opravdu je. Pokud ano, je problém někde v konfiguraci Openfire – např. se odkazuje na jiný keystore.
24.6.2010 12:47 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
To jsem samozřejmě kontroloval. Klíč tam je je pod aliasem jména serveru. Ten je pak nastavený jako proměnná prostředí
xmpp.domain 

Proměnou pro nastavený keystore jsem také zkoušel, zjistil jsem že je relativně k openfire data diru a nakonfiguroval jsem ji správně. Nicméně stále nic.
24.6.2010 13:05 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Máte správně nastavené všechny ty systémové vlastnosti podle dokumentace?
24.6.2010 13:51 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
xmpp.socket.ssl.storeType jsem nenastavoval. je default jks

xmpp.socket.ssl.truststore, xmpp.socket.ssl.trustpass, jsem nenastavoval, protože nepožaduji po klientech certifikát. pochopil jsem dokumentaci tak že to v takovém případě není třeba

Zbytek jsem nastavil. Zkusil jsem také nastavit špatný soubor keystore, nebo špatné heslo a vyjímky odpovídaly. Takže mám za to že jsem keystore i heslo nastavil správně.

Obsah keystore je nasledujici

# keytool -keystore keystore -storepass changeit -list -v

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: $HOSTNAME
Creation date: 24.6.2010
Entry type: trustedCertEntry

Owner: CN=$HOSTNAME, OU=R&D, O=TTCM, L=Prague, ST=Czech Republic, C=cz
Issuer: EMAILADDRESS=$MAIL, CN=domain, OU=R&D, O=COMPANY, L=Praha, ST=Ceska Republika, C=CZ
Serial number: e3b5ad1b6ed7aaf7
Valid from: Wed Jun 23 16:03:28 CEST 2010 until: Thu Jun 23 16:03:28 CEST 2011
Certificate fingerprints:
         MD5:  83:BD:7E:5E:2F:93:64:03:9C:29:19:97:E5:DB:39:50
         SHA1: 4B:34:21:9E:AC:33:AD:81:A9:BD:10:E9:AA:E7:12:9E:CE:F5:A0:FE
         Signature algorithm name: SHA1withRSA
         Version: 1

Zkousel jsem importovat do keystore certifikat CA, ale bez zlepseni.
24.6.2010 14:09 Drucik
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Nemusis to prevadzat do der formatu, prevod do der sa pouziva vtedy ak potrebujes do keystore naimportovat aj certifikat aj privatny kluc , vtedy sa to robi cez der, tebe staci vygenerovat keypar v keystore, vytvorit z toho request, podpisat CA a naimportovat naspet do keystore, u mna to funguje bez problemov...
24.6.2010 14:16 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
funguje ti to bez problémů v openfire, nebo někde jinde?

Ptám se jen pro jistotu. Prováděl jsem podobné brikule (import openssl certifikátů do keystore) pro podepisování jar souborů s antem a pro jboss https server a vše vždy bez problémů. Jen ten openfire..ne a ne

24.6.2010 14:19 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Když jsem certifikát nepřevedl do DER formátu tak mi nešel do keystore importovat. Mimmoto tuto věc radí člověk se stejným problémem na fóru http://www.igniterealtime.org/community/message/192315#192315

jestli ti to s openfire nicméně funguje jinak, tak mi prosím pošli postup s příkazy (stačí heslovitě) a já to přezkouším.

Dik.
24.6.2010 15:04 Drucik
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Takto, musis si naimportovat CA certifikat do keystore a oznacit ho ako trustcacerts , uvidis ho potom oznaceny ako TrustedCertEntry v keystore, privatny kluc s certifikatom ako PrivateKeyEntry ale podmienka je ze tam musia byt aj CA aj vygenerovany certifikat pre server (snad som ta nedoplietol este viac :):
  keytool -import -alias rootCA -trustcacerts -file root-ca-crt.pem -keystore .keystore
dalej si vygenerujes keypar, vygenerujes certifikat request, podpises CA-ckou a importujes spet v pem formate....

24.6.2010 22:48 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Tak to zkusme ještě jednou
1. Vygeneruji rootCA (pomocí YaSTu) a exportuji certifikát do /tmp/cacert.pem a klíč do /tmp/rootCA.key

2. Import do keystore
 keytool -keystore keystore -storepass password -trustcacerts -alias rootCA -import -file /tmp/cacert.pem

3) Vygenerování klíče
keytool -genkey -keystore keystore -alias claunfish -keyalg RSA
Enter keystore password:                                                                       
Keystore password is too short - must be at least 6 characters                                 
Enter keystore password:                                                                       
What is your first and last name?                                                              
  [Unknown]:  claunfish                                                                        
What is the name of your organizational unit?                                                  
  [Unknown]:  unit                                                                             
What is the name of your organization?                                                         
  [Unknown]:  organization                                                                     
What is the name of your City or Locality?                                                     
  [Unknown]:  city                                                                             
What is the name of your State or Province?                                                    
  [Unknown]:  province                                                                         
What is the two-letter country code for this unit?                                             
  [Unknown]:  cz                                                                               
Is CN=claunfish, OU=unit, O=organization, L=city, ST=province, C=cz correct?
  [no]:  yes

Enter key password for claunfish
        (RETURN if same as keystore password):


4) Vygeneruji csr
keytool -certreq -keystore keystore -alias claunfish -file claunfish.csr -keyalg RSA
Enter keystore password:

5) Podepíši csr
openssl x509 -req -in claunfish.csr -CA /tmp/cacert.pem -CAkey /tmp/rootCA.key -out claunfish.crt -days 365 -CAcreateserial
Signature ok
subject=/C=cz/ST=province/L=city/O=organization/OU=unit/CN=claunfish
Getting CA Private Key


6) Importuji certifikát do keystore
 keytool -keystore keystore -alias claunfish -file claunfish.crt -keyalg RSA -import
Enter keystore password:
Certificate reply was installed in keystore


7) Nastavím proměné prostředí v openfire
  xmpp.socket.ssl.keypass password
xmpp.socket.ssl.keystore keystore 

8) restartuji openfire

voala:
java.security.InvalidKeyException: Supplied key (null) is not a RSAPrivateKey instance
	at org.bouncycastle.jce.provider.JDKDigestSignature.engineInitSign(Unknown Source)
	at java.security.Signature$Delegate.engineInitSign(Signature.java:1095)
	at java.security.Signature.initSign(Signature.java:480)
	at org.bouncycastle.jce.PKCS10CertificationRequest.(Unknown Source)
Jen dodám, že stro se jmenuje claunfish. Instalace openfire je úplně čistá a vše je necháno v default nastavení.

Výpis keystore:
keytool -keystore keystore -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

rootca, 24.6.2010, trustedCertEntry,
Certificate fingerprint (MD5): A5:AB:06:4F:45:1F:B3:7B:0A:45:96:B3:B5:2E:24:51
claunfish, 24.6.2010, PrivateKeyEntry,
Certificate fingerprint (MD5): 5E:24:FD:64:25:28:C2:16:85:0A:20:EF:CC:81:12:94

24.6.2010 15:49 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
V tom keystore je jen jeden záznam, a podle mne je bez privátního klíče. Pokud používáte certifikát podepsaný CA, měl byste tam mít dva záznamy – certifikát CA a pak certifikát + privátní klíč vašeho serveru.
24.6.2010 22:20 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
No, v tomhle se různé návody dost různí. Jeden píše že ano, jiný zase že se po vygenerování csr musí smazat, aby bylo možné naimportovat crt. Já jsem nicméně zkoušel vše, tj ponechat privátní klíč, ponechat cacert, a nebo smazat vše a importovat pouze podepsaný certifikát
25.6.2010 09:20 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Privátní klíč tam samozřejmě být musí. A importem kořenového certifikátu rozhodně nic nezkazíte, navíc standardní javovské třídy normálně ověřují certifikační cestu, takže by mne překvapilo, pokud by to Openfire měl řešené nějak jinak, není k tomu důvod.
25.6.2010 10:23 Drucik
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Ten claunfish uz obsahuje certifikat aj privatny kluc, takze 3 polozky tam nemusia byt. Problem asi skor vidim v tomto:
org.bouncycastle.jce.PKCS10CertificationRequest
mi to pripada ako keby to bolo v zlom formate, z nejakeho dovodu ten openfire pouziva pkcs10 co nieje default format vy vytvoreni keypairu.... Ja keystore konkretne nepouzivam pre openfire ale pre inu javovsku aplikaciu a funguje mi to aj takto, otazne ale je naozaj v akom formate to parsuju... Imho by to chcelo este vyskusat ten der format alebo prekodit ten privatny/certifikat do pkcs10
25.6.2010 14:19 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
To co je uvedeno v komentáři 13 už je správný keystore, jsou tam dva záznamy – CA a certifikát serveru i s privátním klíčem. Reagoval jsem jen na předchozí komentář.

Ten formát je divný. Formát keystore se zadává v těch systémových vlastnostech, pokud není uveden, mělo by se použít JKS. Druhá věc je, jestli se tam nějak neplete Bouncycastle, nenapadá mne důvod, proč tam tu knihovnu vůbec mít, když vše potřebné má už Java v sobě. Bylo by dobré sem dát ještě výpis verze Javy (java -version), případně jestli tam není třeba právě Bouncycastle nainstalovaný v rozšiřujících knihovnách…
25.6.2010 21:04 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Příloha:
java -version
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.3) (suse-2.1.1-i386)
OpenJDK Client VM (build 14.0-b16, mixed mode)
//ani jsem nevěděl že mam icedtea. Zkusím ještě sun, s čajem jsem měl s certifikáty už pár neblahých zkušeností :)

bouncy castle je v lib:
Manifest-Version: 1.0
Created-By: 1.5.0_08-b03 (Sun Microsystems Inc.)
Ant-Version: Apache Ant 1.6.5
Specification-Version: 1.1
Specification-Vendor: BouncyCastle.org
Implementation-Vendor-Id: org.bouncycastle
Extension-Name: org.bouncycastle.bcprovider
Implementation-Version: 1.39.0
Implementation-Vendor: BouncyCastle.org

Přikládám i keystore použitý v testu
25.6.2010 21:33 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
po odstraneni studeneho caje je vse stejne i s pouzitim
java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)

Jen si rikam proc jsou v te chybove hlasce informace o pkcs10
java.security.InvalidKeyException: Supplied key (null) is not a RSAPrivateKey instance
	at org.bouncycastle.jce.provider.JDKDigestSignature.engineInitSign(Unknown Source)
	at java.security.Signature$Delegate.engineInitSign(Signature.java:1095)
	at java.security.Signature.initSign(Signature.java:480)
	at org.bouncycastle.jce.PKCS10CertificationRequest.(Unknown Source)
	at org.bouncycastle.jce.PKCS10CertificationRequest.(Unknown Source)
	at org.jivesoftware.util.CertificateManager.createSigningRequest(CertificateManager.java:392)
	at org.jivesoftware.openfire.admin.ssl_002dcertificates_jsp._jspService(ssl_002dcertificates_jsp.java:548)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:66)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:42)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:70)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:146)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
25.6.2010 21:45 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
Zkuste přes tu systémovou vlastnost Openfire xmpp.socket.ssl.storeType vnutit použití jks.
27.6.2010 14:59 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše Re: Openfire a SSL certifikát
bez výsledku.
27.6.2010 15:03 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše dekuji za pomoc
Odpovědět | | Sbalit | Link | Blokovat | Admin
Projel jsem si fórum na ignitreal a zjistil jsem že tento problém je zdroje flustrace pro mnoho lidí a že v tom nejsem sám. Někdo si upravil kód, někdo nabízí ještě další pokusy.

Někdo navrhuje že ve verzi 3.6.6 dojde k nápravě.

Zkusím ejabbered, který vypadá že navíc bude umět podporu "nového zabezpečení" TLS (oproti starému SSL) na porstu 5222. Tak snad se podaří. Každopádně ještě jednou dík za rady.

http://www.igniterealtime.org/community/search.jspa?q=java.security.InvalidKeyException%3A+Supplied+key+%28null%29+is+not+a+RSAPrivateKey+instance&Submit.x=0&Submit.y=0

http://www.igniterealtime.org/community/message/199305#199305

30.6.2010 11:09 pnemec | skóre: 8 | blog: jotter
Rozbalit Rozbalit vše pro ty kdo prijdou po mne
Ještě jsem celý problém konzultoval s kolegou, který má víceleté zkušenosti (spokojenost) s openFire. Jeho postup - instalace staré verze, vytvoření certifikátů a postupný upgrade, naznačuje, že problém je vázán na v tuto chvíli aktuální verzi 3.6.4.

Já jsem nakonec skončil u ejabbered, který jsem po krásných 2 hodinách sprovoznil i s certifikáty (ty dvě hodiny mi trvalo identifikovat záhadnou chybu v erlangu, která byla způsobena tím, že se ze záhadných důvodů erlang nainstaloval 32 na 64b systému, krásná chybka :))

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.