有這樣一種業務場景,我們內網的應用要去訪問互聯網上的服務,因爲應用不能直接對互聯網暴露,這時就需要代理。有的時候,互聯網的服務,比如微信,會要求進行https的雙向認證,即在我們一側也需要證書和密鑰文件。
我們代理服務器使用apache,網上的資料只介紹了apache代理https單向認證的配置方法,因此進行了研究。
經常實驗,發現在httpd.conf中配置,可以實現apache作爲客戶端的SSL雙向認證
SSLProxyEngine on
SSLProxyMachineCertificateFile /apache/abc/client.pem
其中client.pem 是把證書和私鑰合併到一個文件生成的。
由於微信給的文件是p12類型的,需要轉換爲apache可以識別的pem格式,下面爲具體的步驟
1,從p12證書導出pem證書
openssl pkcs12 -clcerts -nokeys -in abc.p12 -out abcde.pem,
2,從p12證書導出私鑰
openssl pkcs12 -nocerts -in abc.p12 -out abcde.pem
3,處理導出的私鑰,我理解是將pkcs#8格式的密鑰文件轉換爲pkcs#1格式,這樣apache才能識別。如果使用pkcs#8格式的密鑰,apache啓動的時候會報(missing or encrypted private key?)。另外如果是nginx,使用pkcs#8格式的密鑰重啓的時候要輸入密碼,而導出成pkcs#1格式則不需要。
openssl rsa -in abcde.pem -out abcdenew.pem
4,把證書和密鑰合成一個文件cat abcde.pem abcdenew.pem >client.pem