2013-08-01 259 views
5

我試圖設置Apache以使用私鑰和證書來使用SSL。問題是,阿帕奇不知何故認爲,關鍵和CRT文件不匹配:Apache2 SSL證書/密鑰不匹配

[Thu Aug 01 11:35:18 2013] [warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!? 
[Thu Aug 01 11:35:18 2013] [debug] ssl_engine_init.c(846): Configuring RSA server private key 
[Thu Aug 01 11:35:18 2013] [error] Unable to configure RSA server private key 
[Thu Aug 01 11:35:18 2013] [error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch 

這個錯誤我檢查羯羊與否的關鍵後,並使用證書匹配:

$ openssl x509 -noout -modulus -in server.crt | openssl md5 
$ openssl rsa -noout -modulus -in server.key | openssl md5 

而結果都是一樣的,所以看起來密鑰和證書確實匹配!我的網站配置包含以下SSL設置:

SSLCertificateFile /etc/ssl/certs/server.crt 
    SSLCertificateKeyFile /etc/ssl/private/server.key 

證書由我自己創建的CA簽署,我用於我的客戶。在這一刻,我通過Java託管HTTPS站點(和Chrome/Firefox/IE/Safari/...都接受證書和密鑰),但是性能不如我想要的那樣,我願意改用Apache。不過,我不明白爲什麼Apache說證書和密鑰不匹配?我爲這個錯誤搜索了很多,發現了很多結果,但是沒有一個代表我的情況,也沒有爲我的問題提供有效的解決方案。我使用自己的CA的原因是我有幾百(和計數)的證書用於基於信任的網絡。

編輯: 這個問題似乎OpenSSL的關係,我測試了相同的最終錯誤如下:

..............:~$ openssl s_server -cert server.crt -key server.key 
140518544565920:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 
140518544565920:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:831: 
140518544565920:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:751:Field=n, Type=RSA 
140518544565920:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115: 
Using default temp DH parameters 
Using default temp ECDH parameters 
error setting private key 
140518544565920:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:331: 

可有人點我的方向是正確的什麼,我做錯了什麼?

我retranscoded所使用的JKS直接使用網絡服務器(所有瀏覽器都接受)以PEM證書和私鑰,但仍當我從OpenSSL的得到了同樣的錯誤:

openssl s_server -debug -cert server.crt -key server.key 
Using default temp DH parameters 
Using default temp ECDH parameters 
error setting private key 
140157841004192:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:331: 

這怎麼可能所有瀏覽器接受密鑰/證書組合,openssl拒絕一起使用它們?

+0

你知道嗎? – Nick

+0

請參閱:http://stackoverflow.com/questions/4658484/ssl-install-problem-key-value-mismatch-but-they-do-match – kenorb

+0

@Nick?請解釋你的評論。 –

回答

3
$ openssl s_server -cert server.crt -key server.key 
140518544565920:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 
140518544565920:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:831: 
140518544565920:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:751:Field=n, Type=RSA 
140518544565920:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115: 

添加-keyform。它可以是DER或PEM。您必須查看server.key以確定表單。

如果server.key具有--- BEGIN RSA PRIVATE KEY ---(或類似),則其PEM。如果它沒有PEM編碼,那麼嘗試DER。

而且,server.key可能被加密。您可能必須在沒有密碼的情況下重新保存密鑰。

3

你的虛擬主機文件是什麼樣的? 沒有看到該文件,很難說出你爲什麼會收到警告。但是,警告很可能來自您的虛擬主機文件,其服務器名稱與SSL證書的設置不同。
檢查您的虛擬主機文件並更改

<VirtualHost _default_:443> 

<VirtualHost *:443> 

甚至

<VirtualHost yoursevername:443> 
+0

該問題與open_ssh有關,因爲它也出現在沒有apache的ope_ssl中。因此主機名稱無關。虛擬主機文件設置爲

0

不管你有你的<VirtualHost ...:443>行什麼,我認爲這個問題是由指示錯誤日誌中的行:

[warn] RSA server certificate wildcard CommonName (CN) `*.-----.nl' does NOT match server name!? 

什麼是你的虛擬主機的ServerName和它匹配您的證書的CN,即在過去的條目「主題:」從openssl x509 -noout -text -in <certfile>

而且輸出的線,你嘗試noloader的建議?