詳解Nginx + Tomcat HTTPS/SSL 配置 |
發(fā)布時(shí)間: 2012/5/18 15:36:46 |
1. 申請(qǐng) SSL 證書(shū)
你可以從很多網(wǎng)站購(gòu)買(mǎi)到SSL證書(shū),我經(jīng)常使用的是 GeoTrust 。證書(shū)都是收費(fèi)的(據(jù)說(shuō)有免費(fèi)的,沒(méi)試過(guò)),價(jià)格有貴的有便宜的。它們的區(qū)別是發(fā)行證書(shū)的機(jī)構(gòu)不同,貴的證書(shū)機(jī)構(gòu)更權(quán)威,證書(shū)被瀏覽器否決的幾率更小。正規(guī)運(yùn)營(yíng)的網(wǎng)站建議購(gòu)買(mǎi)好一點(diǎn)的證書(shū),免了麻煩,也貴不了多少。 1.1 生成 CSR 文件 申請(qǐng)證書(shū)的時(shí)候,證書(shū)的發(fā)行機(jī)構(gòu)會(huì)要求你提供一個(gè)CSR(Certificate Signing Request)文件,這個(gè)文件包含了發(fā)行機(jī)構(gòu)需要的所有信息。在生成CSR之前,我們必須先創(chuàng)建密鑰對(duì): $JAVA_HOME/bin/keytool -genkey -alias <your_alias_name> -keyalg RSA -keystore <your_keystore_filename> -keysize 2048 這里我們使用的是RSA非對(duì)稱(chēng)算法,2048位的密鑰(好的證書(shū)機(jī)構(gòu)強(qiáng)制2048位)。可以是網(wǎng)站名,比如“oschina”,同理可以是oschina.keystore。 這個(gè)命令會(huì)讓你輸入私鑰所有者的信息,也就是你的網(wǎng)站的信息,這里只有一個(gè)字段是關(guān)鍵的“Common Name(CN)”,這個(gè)字段應(yīng)該是你的網(wǎng)站域名,例如“www.oschina.net”,別的字段例如國(guó)家地區(qū)什么的你看著填就行了。使用keytool工具的話,它提示輸入“first and last name”就是讓你輸入“Common Name”。在你填完信息以后,它會(huì)讓你設(shè)置keystore和密鑰的訪問(wèn)密碼,你輸入就行了,建議使用相同的密碼。如果不輸入的話,默認(rèn)密碼是“changeit”。 下面來(lái)生成CSR文件: $JAVA_HOME/bin/keytool -certreq -keyalg RSA -alias <your_alias_name> -file certreq.csr -keystore <your_keystore_filename> 這里 和上面一步是一致的,我這里輸入 oschina ,輸入 oschina.keystore。這一步會(huì)問(wèn)你要keystore密碼,就是你上一步設(shè)置的密碼。生成的“certreq.csr”是一個(gè)文本文件,你打開(kāi)應(yīng)該看到類(lèi)似如下內(nèi)容: -----BEGIN NEW CERTIFICATE REQUEST----- MIICvzCCAacCAQAwejELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMI U2hlbnpoZW4xFDASBgNVBAoTC09TQ2hpbmEuTkVUMRQwEgYDVQQLEwtPU0NoaW5hLk5FVDEYMBYG A1UEAxMPd3d3Lm9zY2hpbmEubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnyZ3 8SXC6FmggtMtGBMCW/L88qd2DXjeryQExyUfy30VU4ROYcPnLNZXtwtE+poOf7AdqrQvrYBNJsls xAmlKEKN7t1ATq3vYSaygx74Ixh4lsYQhJA03sZlcIe8N1EoSYwvch37ksQfhXC/zcZ9ltT9Pk67 dZTVoNPwI92bxH1VpCwnpNpygT1v8YSCQM6mIrBkWeNuWolhYQmKSRgOM9gV8hd06zBd6mNBGdxB ktZ6KlZQp8i+A4hevcRuo9ebNLIhfERDghgos+zbaq1d2whgWegdv/mLnudLHjyyqcEBwk87rp7n zFh2C220JmDMXAMGsz0QeA60wpRC6492UwIDAQABoAAwDQYJKoZIhvcNAQEFBQADggEBAGfLBzJt +CFJ0v4LzttWHNMEpj5rvtoEBr2QYtB0op2y27mp0qwqCfCj0wv3Rw8xZzh6oPKx0NB2tnWqcqyN XmVW4nl3SLd9bdY3I7/wdQkriCd6sBgn6Voh8mJOGKKtNZADQ3AfqUD1ge39bL+v7H0EdwtOfmCr tAn35+qIIXH3SWS2R+G5sqa76GgjSRwkN8awzrbZJbA/hRPi5wwL+RV3/NFWfFmr4hpsuWHos7ly 5iFJpQqWVodpq9mxaaugzKvv0HG+A8ip0DG+vB8SnUgBMnAMM8UP1P2ozgNG0Twncq+uIAyz0Uw9 IzQHiWhtGpFAN9RO0xPl4EnYW6A+TM4= -----END NEW CERTIFICATE REQUEST----- 你把CSR的內(nèi)容提供給證書(shū)發(fā)行機(jī)構(gòu)就行了。 1.2 提交認(rèn)證請(qǐng)求 在你提交證書(shū)簽名請(qǐng)求以后,證書(shū)發(fā)行機(jī)構(gòu)會(huì)讓你提供一個(gè)管理員郵箱來(lái)驗(yàn)證你的請(qǐng)求。例如我是給 oschina.net 請(qǐng)求簽名,它就要我提供 admin@oschina.net 或者 webmaster@oschina.net 來(lái)驗(yàn)證這個(gè)請(qǐng)求的確是擁有 oschina.net 域名的人發(fā)起的。收到證書(shū)發(fā)行機(jī)構(gòu)的驗(yàn)證郵件后,你去確認(rèn),然后付款就會(huì)收到簽名后的證書(shū)(實(shí)時(shí)的,不需要等待): -----BEGIN CERTIFICATE----- MIIFBDCCA+ygAwIBAgIDA7WjMA0GCSqGSIb3DQEBBQUAMGExCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRh dGVkIFNTTDEbMBkGA1UEAxMSR2VvVHJ1c3QgRFYgU1NMIENBMB4XDTEyMDIyNjA0 NTQyMVoXDTE0MDIyNzExMDQwMFowge0xKTAnBgNVBAUTIGxEMEdjSW1OSlhyQTZY YXUtU055R1prTUtXdUdQVDFkMQswCQYDVQQGEwJDTjEYMBYGA1UEChMPd3d3Lm9z Y2hpbmEubmV0MRMwEQYDVQQLEwpHVDg3NjQ4MDE5MTEwLwYDVQQLEyhTZWUgd3d3 Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzIChjKTEyMTcwNQYDVQQLEy5Eb21h aW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBRdWlja1NTTChSKSBQcmVtaXVtMRgwFgYD VQQDEw93d3cub3NjaGluYS5uZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCfJnfxJcLoWaCC0y0YEwJb8vzyp3YNeN6vJATHJR/LfRVThE5hw+cs1le3 C0T6mg5/sB2qtC+tgE0myWzECaUoQo3u3UBOre9hJrKDHvgjGHiWxhCEkDTexmVw h7w3UShJjC9yHfuSxB+FcL/Nxn2W1P0+Trt1lNWg0/Aj3ZvEfVWkLCek2nKBPW/x hIJAzqYisGRZ425aiWFhCYpJGA4z2BXyF3TrMF3qY0EZ3EGS1noqVlCnyL4DiF69 xG6j15s0siF8REOCGCiz7NtqrV3bCGBZ6B2/+Yue50sePLKpwQHCTzuunufMWHYL bbQmYMxcAwazPRB4DrTClELrj3ZTAgMBAAGjggE2MIIBMjAfBgNVHSMEGDAWgBSM 9NmTCke8AKBKzkt1bqC2sLJ+/DAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYI KwYBBQUHAwEGCCsGAQUFBwMCMCcGA1UdEQQgMB6CD3d3dy5vc2NoaW5hLm5ldIIL b3NjaGluYS5uZXQwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2d0c3NsZHYtY3Js Lmdlb3RydXN0LmNvbS9jcmxzL2d0c3NsZHYuY3JsMB0GA1UdDgQWBBSMnwGchSF9 4rpwjGM0R5TdD/OU3zAMBgNVHRMBAf8EAjAAMEcGCCsGAQUFBwEBBDswOTA3Bggr BgEFBQcwAoYraHR0cDovL2d0c3NsZHYtYWlhLmdlb3RydXN0LmNvbS9ndHNzbGR2 LmNydDANBgkqhkiG9w0BAQUFAAOCAQEAYtzSVIU/O43qyL4mBFv8DSwoLfi5kHIz 35sBVHM1Z3LW8tnIyscPewYZdy6pszBsm4AtJ0C+fdCM6Ai4GnMdIacao18OIcXS n2ZiYVrZAs/GCzHRpCpu3VfFTogBiuTS+/Sm87KD8o1kHCxGxNDftfPorq4K5B+0 sIWhxU2gErog1vkGqzuO5CiupMIIp6swqGR0rUnh7XH+WkfjamnU9I8Yqz//QENT cIaUI/2E2btqCvK4vgtsvhzYHLhmcGljiu0PEeCtIBa4CZSiiMk6E9P7tb/+l3o4 CS9dHYutNG1LqN3FNx34EYBYykGOz2N79L3BIUwIXa7v7QoO+T+c6w== -----END CERTIFICATE----- 這就是你的網(wǎng)站,經(jīng)過(guò)權(quán)威機(jī)構(gòu)簽名的證書(shū)。當(dāng)用戶通過(guò)HTTPS訪問(wèn)你的網(wǎng)站的時(shí)候,瀏覽器會(huì)驗(yàn)證這個(gè)證書(shū)。 1.3 下載證書(shū) 證書(shū)分很多種格式,例如X.509(.crt文件)、PKCS #7(.p7s文件)等等。不同的網(wǎng)站服務(wù)器可能要求不同格式的證書(shū)。很多時(shí)候,給我們的證書(shū)簽名的是二級(jí)證書(shū)機(jī)構(gòu),它上面還有根證書(shū)機(jī)構(gòu)。所以你在購(gòu)買(mǎi)簽名過(guò)的證書(shū)以后,它還會(huì)給你一個(gè)它自己的證書(shū)叫做“Intermediate CA(中間證書(shū))”,格式和你自己的證書(shū)是一樣的。在部署證書(shū)的時(shí)候你需要同時(shí)部署你自己的證書(shū)還有中間證書(shū),這就叫做Certificate Chain。好的證書(shū)發(fā)行機(jī)構(gòu)會(huì)提供多種證書(shū)供你選擇下載,建議下載同時(shí)下載X.509還有 PKCS #7兩種格式。不要忘記下載 X.509格式的中間證書(shū)。PKCS #7格式的不要是因?yàn)檫@個(gè)格式自帶了各種中間證書(shū)。 2. 部署證書(shū)到Tomcat Tomcat要求的是包含簽名過(guò)證書(shū)的keystore文件和keystore密碼。所以我們要先把證書(shū)導(dǎo)入keystore 2.1 導(dǎo)入證書(shū)到KeyStore $JAVA_HOME/bin/keytool -import -alias oschina -trustcacerts -file oschina.p7s -keystore oschina.keystore 上面的命令中 alias “oschina” 和之前申請(qǐng)證書(shū)的時(shí)候輸入的 alias 要一致。 2.2 修改Tomcat配置 <Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="false" maxThreads="25" port="8443" keystoreFile="/oschina/webapp/oschina.keystore" keystorePass="xxxxxxx" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS" /> 3. 部署證書(shū)到Nginx Nginx和Tomcat不一樣,它要求的是證書(shū)文件 .crt 和私鑰 .key 。遺憾的是,我們的私鑰在keystore里面,而JDK自帶的keytool并不提供私鑰的導(dǎo)出功能,所以我們得借助第三方工具來(lái)導(dǎo)出私鑰。 3.1 導(dǎo)出私鑰(key) 有一個(gè)開(kāi)源的私鑰導(dǎo)出工具叫做 java-exportpriv 。它是一個(gè)簡(jiǎn)單的java程序,你下載以后參考它的說(shuō)明,編譯,然后運(yùn)行即可,非常簡(jiǎn)單,我就不多羅嗦了。 3.2 創(chuàng)建certificate chain 和Apache不一樣,Nginx沒(méi)有Certificat Chain這個(gè)參數(shù),所以你要把你的證書(shū)和中間證書(shū)合并。合并證書(shū)很簡(jiǎn)單,創(chuàng)建一個(gè)先的文件 oschina-chain.crt,內(nèi)容如下: -----BEGIN CERTIFICATE----- 這里是你證書(shū)的內(nèi)容 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 這里是中間證書(shū)的內(nèi)容 -----END CERTIFICATE----- 3.3 修改Nginx配置文件 server { listen 443 ssl; server_name localhost; ssl on; ssl_certificate /oschina/webapp/oschina-chain.crt; ssl_certificate_key /oschina/webapp/oschina.key; location / { include proxy.conf; proxy_pass https://61.145.122.155:443; } } 4. 驗(yàn)證證書(shū)是否安裝正確 首先當(dāng)然是自己用HTTPS的方式訪問(wèn)自己的網(wǎng)站,看看瀏覽器是否報(bào)錯(cuò)或者報(bào)警,記得要把各種瀏覽器都試一遍。然后用 在線工具來(lái)測(cè)試你的網(wǎng)站HTTPS的配置是否正確,如果都測(cè)試通過(guò),那么就大功搞成啦! 本文出自:億恩科技【www.ruiliheng.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |