溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用linux自建證書(ios強(qiáng)制https 微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)

發(fā)布時(shí)間:2020-07-18 07:44:23 來源:網(wǎng)絡(luò) 閱讀:3217 作者:ranfengzheng 欄目:移動(dòng)開發(fā)

前言:
  作為一個(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ì):

使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)


使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)


上說說找不到頒發(fā)者需要這里我需要先安裝生產(chǎn)Root.crt(電腦版安裝的時(shí)候需要將證書添加到受信任的根證書中  手機(jī) ios 不需要 注意??!):



使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)


若沒有添加到信任機(jī)構(gòu)中則會(huì)是這樣的:

使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)


所以切記電腦端需要添加到受信任的根證書頒發(fā)機(jī)構(gòu)!


但是就算你配置了你會(huì)發(fā)現(xiàn) 還是不行 :

使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huá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之后訪問一切正常!


使用linux自建證書(ios強(qiáng)制https  微信小程序強(qiáng)制https 本地開發(fā)環(huán)境)




到最后說一點(diǎn)就是如果你需要重新配置需要清空/etc/pki/CA/index.txt這個(gè)文件

如下命令:
echo > /etc/pki/CA/index.txt 
即可


筆者只寫了具體怎么做,但是使用到的openssl的參數(shù)還需要自行百度一下! 




向AI問一下細(xì)節(jié)

免責(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)容。

AI