前些日志在研究saltstack的api,使用了https的方式來訪問api蝴猪,創(chuàng)建一對(duì)兒密鑰
/etc/pki/tls/certs/localhost.crt
和/etc/pki/tls/certs/localhost.key
過了幾天后發(fā)現(xiàn)我實(shí)驗(yàn)的這臺(tái)機(jī)器的Apache服務(wù)宕掉了调衰,而且重啟失敗膊爪,故障信息如下
shell> service httpd restart
Stopping httpd: [FAILED]
Starting httpd: [FAILED]
shell> tail /var/log/httpd/error_log
[Mon Mar 28 10:46:36 2016] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
shell> tail /var/log/httpd/ssl_error_log
[Mon Mar 28 10:49:19 2016] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Mon Mar 28 10:49:19 2016] [error] Unable to configure RSA server private key
[Mon Mar 28 10:49:19 2016] [error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
- 當(dāng)我發(fā)現(xiàn)重啟失敗且終端沒有報(bào)錯(cuò)輸出時(shí),當(dāng)時(shí)打開了
/var/log/message
和/var/log/httpd/error_log
兩個(gè)log嚎莉,重新重啟Apache服務(wù)米酬,發(fā)現(xiàn)message沒有輸出,而httpd的error_log有一行[notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
輸出 - 發(fā)現(xiàn)suEXEC之后趋箩,我百度了該關(guān)鍵字赃额,得知是負(fù)責(zé)處理CGI和SSI程序的請(qǐng)求,當(dāng)我看到SSL的時(shí)候叫确,就突然想起之前做過的salt-api的實(shí)驗(yàn)跳芳,當(dāng)時(shí)創(chuàng)建了一對(duì)兒密鑰,該密鑰過期時(shí)間大概是24小時(shí)启妹,猜測可能是Apache的默認(rèn)配置文件加載了mod_ssl模塊筛严,而且引用了我創(chuàng)建密鑰對(duì)兒的默認(rèn)位置醉旦,而該密鑰卻處于失效狀態(tài)饶米,所以Apache服務(wù)無法啟動(dòng)(這是當(dāng)時(shí)的猜測)
- 知道是SSL相關(guān)的問題之后,馬上打開
/var/log/httpd/ssl_error_log
查看情況车胡,有如下報(bào)錯(cuò)[warn] RSA server certificate CommonName (CN)
localhost' does NOT match server name!?` 當(dāng)看到這一行報(bào)錯(cuò)的時(shí)候檬输,已經(jīng)確認(rèn)上面猜測的第一點(diǎn),就是Apache的默認(rèn)配置文件加載了mod_ssl模塊匈棘,而且指定密鑰對(duì)兒的位置丧慈,就是我測試salt-api時(shí)創(chuàng)建密鑰對(duì)兒的位置。而且還有一個(gè)錯(cuò)誤就是我密鑰對(duì)兒指定的hostname和Apache指定的hostname并不相同主卫,基于密鑰對(duì)主機(jī)名不符與密鑰過期兩點(diǎn)逃默,造成了Apache無法啟動(dòng)的故障。 - 確定了問題之后簇搅,解決方案有很多種完域,核心思想就是讓Apache的ssl配置失效
- 第一種辦法,可以在Apache的配置中禁用mod_ssl模塊
/etc/httpd/conf.d/ssl.conf
- 第二種辦法瘩将,在
/etc/httpd/conf.d/ssl.conf
配置文件中吟税,指定其他密鑰對(duì)兒的路徑 - 第三種辦法,我的salt-api已經(jīng)測試完畢姿现,可以把創(chuàng)建的密鑰對(duì)兒刪除或更名
- 第一種辦法,可以在Apache的配置中禁用mod_ssl模塊
- 最終我是選擇了第三種的方法肠仪,將原有的密鑰對(duì)兒加了
.bak
后綴,之后重啟Apache恢復(fù)正常备典,問題解決异旧,回頭再去查看/etc/httpd/conf.d/ssl.conf
配置文件的時(shí)候,已經(jīng)自動(dòng)變成了/etc/httpd/conf.d/ssl.conf.bak
相當(dāng)于Apache找不到配置文件中指定的密鑰對(duì)兒后提佣,自動(dòng)禁用了mod_ssl模塊
如果你想了解suexec方面的東西吮蛹,可以參考以下文章: