最近公司項目跟第三方對接,對端要求通過VPN用內網(wǎng)IP對接添诉,還要簽名證書走HTTPS屁桑,順便要求做客戶端SSL鑒權認證!栏赴!
自簽名證書
可以通過openssl命令生成RSA key蘑斧,然后用這個key自己簽名一個證書。
自簽名證書和CA簽名證書的主要區(qū)別是自簽名證書安裝后,客戶端需要安裝信任證書竖瘾,否則瀏覽器還是會報https不安全沟突。12306的證書應該就是自簽名的,所以首頁有為保障您順暢購票捕传,請下載安裝根證書
的提示惠拭。
Note:生成的自簽名證書在Chrome 58之后會一直報err_cert_common_name_invalid
并被標識為not secure,網(wǎng)上有說配置openssl Subject Alt Name能夠解決庸论,待驗證
https://github.com/webpack/webpack-dev-server/issues/854
證書格式
SSL證書有多種格式:
- Apache职辅、Nginx等,使用OpenSSL提供的密碼庫聂示,生成pem域携、key、crt等格式的證書文件鱼喉。
- Tomcat涵亏、Weblogic、JBoss等蒲凶,使用Java提供的密碼庫气筋。通過Java的Keytool工具,生成Java Keystore(jks)格式的證書文件旋圆。
常用證書格式信息:
-
*.der
宠默,*.cer
,*.crt
以二進制形式存放證書灵巧,只有公鑰搀矫,不包含私鑰。 -
*.csr
證書請求刻肄,這個是需要發(fā)給CA用來簽名正式證書用的瓤球。 -
*.pem
一般是文本格式,可以放證書或私鑰敏弃,或者兩者都包含卦羡。 *.PEM如果只包含私鑰,那一般用 *.KEY代替麦到。 -
*.pfx
绿饵,*.p12
是二進制格式,同時含證書和私鑰瓶颠,一般有密碼保護拟赊。
生成自簽名證書
- 生成RAS Key:server.key
Note: 這個命令生成的是證書的Private Key要保存在安全的地方
$ openssl genrsa -out server.key 2048
如果加-des3
參數(shù),會要求輸入密碼粹淋,將來Apache加載了證書啟動時候要輸入這個密碼吸祟。
$ openssl genrsa -des3 -out server.key 2048
通過如下命令可以查看
openssl rsa -noout -text -in server.key
- 執(zhí)行以下命令生成自簽名證書:server.crt
openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt -extensions usr_cert
-days
是證書的有效期天數(shù)瑟慈,可以是多年,例如屋匕,1825標識5年有效期
執(zhí)行以上命令會要求輸入如下信息封豪,這些信息都會出現(xiàn)在最終生成的證書中,可以在瀏覽器直接查看炒瘟。
Note: Comman Name
必須跟真實訪問的domain name一致
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:North
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Test Ltd
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test.com
Email Address []:support@test.com
- Apache配置
需要將如下配置增加的Apache Virtual Host配置里
SSLCertificateFile "/path/to/this/server.crt"
SSLCertificateKeyFile "/path/to/this/server.key"
配置之后可以執(zhí)行sudo apachectl configtest
檢查配置是否正確吹埠。
通過sudo httpd -S
檢查Apache Virtual host信息。
客戶端SSL鑒權認證
我們通常的https證書一般都是單向認證疮装,即服務端認證缘琅。客戶端認證可以提供一種對客戶端鑒權的能力廓推,只有持有證書的客戶端才能訪問Apache下的指定資源刷袍。
在Apache Virtual Host配置如下信息:
Note:此處SSLCACertificateFile 可以配置客戶端的根證書
SSLCACertificateFile "/etc/pki/tls/cert/root.crt"
SSLVerifyClient require
SSLVerifyDepth 10