您好,登錄后才能下訂單哦!
前言:
作為一個(gè)運(yùn)維人員不背鍋,誰背呢!
正文:
現(xiàn)在都要https了,很多童鞋也痛苦本地該如何搭建https環(huán)境,網(wǎng)上一搜 一搜一大把,但是使用就。。。。。。
今天在這里筆者就教大家一步一步使用linux搭建本地的https環(huán)境。。。因我司使用的nginx 所以接口相關(guān)的服務(wù)端配置 也只列出nginx 的配置接下來看筆者如何一步一步弄好https。(可以調(diào)用openssl命令雷同?。?/p>
假設(shè)我司有alp環(huán)境,bet環(huán)境 我司線上域名為test.com 對(duì)應(yīng)的則為 test.alp test.bet相關(guān)域名
則我本地應(yīng)該生成通配型的*.test.alp *.test.bet (ps:注意一點(diǎn)很重要三級(jí)域名需要單獨(dú)配置 如:m.a.test.alp 需要單獨(dú)生成 *.a.test.alp 的通配型 或者 m.a.test.alp 購(gòu)買證書的時(shí)候也是如此! 一個(gè)點(diǎn)多1W多塊錢??! 很重要?。?!本篇文章不涉及三級(jí)域名只爭(zhēng)對(duì)二級(jí)的本地配置)
一、生成根CA的key
linux下使用如下命令:
openssl genrsa -des3 -out RootCA.key 2048
過程中會(huì)出現(xiàn)如下提示則為需要給根證書的key設(shè)置一個(gè)密碼(我直接輸入了123456):
Enter pass phrase for RootCA.key:
接下來如下提示為確認(rèn)輸入根證書的key密碼(依然123456):
Verifying - Enter pass phrase for RootCA.key:
則生成了根證書的key:
[root@localhost key]# ll
total 4
-rw-r--r-- 1 root root 1751 Jan 5 10:27 RootCA.key
[root@localhost key]#
二、生成CA的證書crt(Common Name填RootCA 其他的都不填寫 這個(gè)證書是需要安卓手機(jī) 瀏覽器 蘋果手機(jī) mac 都需要去安裝的 ps:蘋果手機(jī)需要使用url的形式或者郵件的形式才能安裝 很重要!!電腦版安裝的時(shí)候需要將證書添加到受信任的根證書中 手機(jī) ios 不需要 注意!!)
linux下使用如下命令:
openssl req -new -x509 -sha256 -days 3650 -key RootCA.key -out RootCA.crt
然后提示輸入密碼(剛剛設(shè)置的123456):
Enter pass phrase for RootCA.key:
如下提示直接回車:
Country Name (2 letter code) [XX]:
如下提示直接回車:
State or Province Name (full name) []:
如下提示直接回車:
Locality Name (eg, city) [Default City]:
如下提示直接回車:
Organization Name (eg, company) [Default Company Ltd]:
如下提示直接回車:
Organizational Unit Name (eg, section) []:
如下提示填RootCA即可:
Common Name (eg, your name or your server's hostname) []:RootCA
如下提示直接回車:
Email Address []:
將生成RootCA.key 現(xiàn)在可以將這個(gè)key發(fā)給測(cè)試的同事 開發(fā)的同事 安裝此證書(ps:蘋果手機(jī)需要使用url的形式或者郵件的形式才能安裝 很重要??!)
[root@localhost key]# ll
total 8
-rw-r--r-- 1 root root 1265 Jan 5 10:42 RootCA.crt
-rw-r--r-- 1 root root 1751 Jan 5 10:33 RootCA.key
[root@localhost key]#
三、生成*.test.alp的證書(包含key 和 crt)
1.生成*.test.alp證書的key
openssl genrsa -des3 -out testalp.key 2048
如下提示輸入key的密碼(我輸入的依然為123456):
Enter pass phrase for testalp.key:
如下提示再次確認(rèn)密碼(輸入123456):
Verifying - Enter pass phrase for testalp.key:
及生產(chǎn)一個(gè)含有密碼的*.test.alp證書的key
[root@localhost key]# ll
total 12
-rw-r--r-- 1 root root 1265 Jan 5 10:42 RootCA.crt
-rw-r--r-- 1 root root 1751 Jan 5 10:33 RootCA.key
-rw-r--r-- 1 root root 1743 Jan 5 10:48 testalp.key
[root@localhost key]#
2.剛剛生成的是帶密碼的 現(xiàn)在導(dǎo)出一個(gè)無密碼的*.test.alp證書的key(nginx使用的就是現(xiàn)在生產(chǎn)的這個(gè)無密碼的*.test.alp證書的key)
1.如下命令通過key生成一個(gè)無密碼的key:
openssl rsa -in testalp.key -out testalp_nopass.key
如下提示輸入密碼(輸入123456):
Enter pass phrase for testalp.key:
即生產(chǎn)了testalp_nopass.key:
[root@localhost key]# ll
total 16
-rw-r--r-- 1 root root 1265 Jan 5 10:42 RootCA.crt
-rw-r--r-- 1 root root 1751 Jan 5 10:33 RootCA.key
-rw-r--r-- 1 root root 1743 Jan 5 10:48 testalp.key
-rw-r--r-- 1 root root 1675 Jan 5 11:00 testalp_nopass.key
[root@localhost key]#
四、根據(jù)*.test.alp的key生產(chǎn)證書簽名的請(qǐng)求文件(這個(gè)請(qǐng)求文件等會(huì)需要 使用RootCA.key簽名 這里使用 testalp_nopass.key去生成 ps:這里一定要注意一個(gè)問題 Common Name 一定要寫:*.test.alp)
如下命令生產(chǎn)請(qǐng)求文件testalp_nopass.csr:
openssl req -new -sha256 -days 3650 -key testalp_nopass.key -out testalp_nopass.csr
如下提示直接回車:
Country Name (2 letter code) [XX]:
如下提示直接回車:
State or Province Name (full name) []:
如下提示直接回車:
Locality Name (eg, city) [Default City]:
如下提示直接回車:
Organization Name (eg, company) [Default Company Ltd]:
如下提示直接回車:
Organizational Unit Name (eg, section) []:
如下輸入*.test.alp 很重要?。?/strong>:
Common Name (eg, your name or your server's hostname) []:*.test.alp
如下提示直接回車:
Email Address []:
如下提示直接回車:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
如下提示直接回車:
An optional company name []:
則生成了名字為*.test.alp的請(qǐng)求文件testalp_nopass.csr:
[root@localhost key]# ll
total 20
-rw-r--r-- 1 root root 1265 Jan 5 10:42 RootCA.crt
-rw-r--r-- 1 root root 1751 Jan 5 10:33 RootCA.key
-rw-r--r-- 1 root root 1743 Jan 5 10:48 testalp.key
-rw-r--r-- 1 root root 980 Jan 5 11:06 testalp_nopass.csr
-rw-r--r-- 1 root root 1675 Jan 5 11:00 testalp_nopass.key
[root@localhost key]#
五、最后一步通過之前生成的RootCA.key 和RootCA.crt簽名testalp_nopass.csr并生成testalp_nopass.crt
如下命令:
openssl ca -md sha256 -in testalp_nopass.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out testalp_nopass.crt -cert RootCA.crt -keyfile RootCA.key
如下提示需要輸入RootCa.key的密碼(我的為之前配置的123456):
Enter pass phrase for RootCA.key:
很高興的報(bào)錯(cuò)了:
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
139938927691592:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/index.txt','r')
139938927691592:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
[root@localhost key]#
這也是我刻意用新機(jī)器發(fā)生的錯(cuò)誤 該錯(cuò)誤的解決辦法:
如下命令:
touch /etc/pki/CA/index.txt
然后繼續(xù)執(zhí)行:
openssl ca -in testalp_nopass.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out testalp_nopass.crt -cert RootCA.crt -keyfile RootCA.key
如下提示需要輸入RootCa.key的密碼(我的為之前配置的123456):
Enter pass phrase for RootCA.key:
很高興又報(bào)錯(cuò)了:
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for RootCA.key:
/etc/pki/CA/serial: No such file or directory
error while loading serial number
139989781997384:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/serial','r')
139989781997384:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
[root@localhost key]#
該錯(cuò)誤的解決辦法:
如下命令:
touch /etc/pki/CA/serial
echo "00" > /etc/pki/CA/serial
然后繼續(xù)執(zhí)行:
openssl ca -in testalp_nopass.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out testalp_nopass.crt -cert RootCA.crt -keyfile RootCA.key
如下提示需要輸入RootCa.key的密碼(我的為之前配置的123456):
Enter pass phrase for RootCA.key:
恭喜恭喜三連錯(cuò):
Check that the request matches the signature
Signature ok
The mandatory stateOrProvinceName field was missing
[root@localhost key]#
該錯(cuò)誤的解決辦法:
把/etc/pki/tls/openssl.cnf中大約86 87的行
請(qǐng)使用vi把如下內(nèi)容
stateOrProvinceName= match
organizationName= match
修改成
stateOrProvinceName= optional
organizationName= optional
在保存就可以了。
然后繼續(xù)執(zhí)行:
openssl ca -in testalp_nopass.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out testalp_nopass.crt -cert RootCA.crt -keyfile RootCA.key
如下提示需要輸入RootCa.key的密碼(我的為之前配置的123456):
Enter pass phrase for RootCA.key:
如下提示輸入y:
Sign the certificate? [y/n]:y
如下提示輸入y:
1 out of 1 certificate requests certified, commit? [y/n]y
則簽名成功:
[root@localhost key]# ll
total 28
-rw-r--r-- 1 root root 1265 Jan 5 10:42 RootCA.crt
-rw-r--r-- 1 root root 1751 Jan 5 10:33 RootCA.key
-rw-r--r-- 1 root root 1743 Jan 5 10:48 testalp.key
-rw-r--r-- 1 root root 4373 Jan 5 11:26 testalp_nopass.crt
-rw-r--r-- 1 root root 980 Jan 5 11:06 testalp_nopass.csr
-rw-r--r-- 1 root root 1675 Jan 5 11:00 testalp_nopass.key
[root@localhost key]#
到這里對(duì)如下文件進(jìn)行說明:
nginx只需要testalp_nopass.crt 以及testalp_nopass.key即可
瀏覽器 手機(jī)端只需要安裝 RootCA.crt 即可 且這個(gè)RootCA.crt是不需要到最后弄完了才可以使用,這個(gè)crt安裝了之后后續(xù)該電腦 該手機(jī)設(shè)備 不需要再次更新安裝??!一次安裝永久有效 也不會(huì)影響后續(xù)對(duì)*.test.bet的簽發(fā)(ps:蘋果手機(jī)需要使用url的形式或者郵件的形式才能安裝 很重要!! 電腦版安裝的時(shí)候需要將證書添加到受信任的根證書中 手機(jī) ios 不需要 注意!!)
*.test.bet的簽發(fā)和生產(chǎn)也如上*.test.alp一樣即可
這里我給大家演示下效果.
nginx下的配置:
我在nginx 的conf目錄下創(chuàng)建了一個(gè)key的文件夾存放 testalp_nopass.crt 和testalp_nopass.key:
[root@localhost key]# ll
total 12
-rw-r--r-- 1 root root 4373 Jan 5 11:26 testalp_nopass.crt
-rw-r--r-- 1 root root 1675 Jan 5 11:00 testalp_nopass.key
[root@localhost key]# pwd
/usr/local/etc/nginx/conf/key
[root@localhost key]#
配置nginx.conf增加如下配置(因只做測(cè)試 直接在nginx.conf直接配置 且項(xiàng)目為寫的html的測(cè)試頁):
server
{
listen 443;
ssl on;
ssl_certificate key/testalp_nopass.crt;
ssl_certificate_key key/testalp_nopass.key;
index index.html;
root /data/test/;
}
主要配置為:
listen 443;
ssl on;
ssl_certificate key/testalp_nopass.crt;
ssl_certificate_key key/testalp_nopass.key;
訪問一下試試會(huì)發(fā)現(xiàn)https了 但是貌似不對(duì):
上說說找不到頒發(fā)者需要這里我需要先安裝生產(chǎn)Root.crt(電腦版安裝的時(shí)候需要將證書添加到受信任的根證書中 手機(jī) ios 不需要 注意??!):
若沒有添加到信任機(jī)構(gòu)中則會(huì)是這樣的:
所以切記電腦端需要添加到受信任的根證書頒發(fā)機(jī)構(gòu)!
但是就算你配置了你會(huì)發(fā)現(xiàn) 還是不行 :
盡管說證書沒有問題。原因在于域名!沒錯(cuò)!是域名 這個(gè)也就是為什么這里提出來 是因?yàn)橐醋C之前為什么說要配置*.test.alp的重要:
nginx增加配置和電腦host解析test.test.alp之后的結(jié)果:
nginx增加配置:
server
{
listen 443;
server_name test.test.alp;
ssl on;
ssl_certificate key/testalp_nopass.crt;
ssl_certificate_key key/testalp_nopass.key;
index index.html;
root /data/test/;
}
主要增加:
server_name test.test.alp;
配置hosts之后訪問一切正常!
到最后說一點(diǎn)就是如果你需要重新配置需要清空/etc/pki/CA/index.txt這個(gè)文件
如下命令:
echo > /etc/pki/CA/index.txt
即可
筆者只寫了具體怎么做,但是使用到的openssl的參數(shù)還需要自行百度一下!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。