php 自制https证书,自己生成https证书

工作中经常需要绑定域名到本地进行开发,我就经常使用*.hp.dev作为自己的本地开发域名。现代浏览器都默认跳转到https地址,会对我们开发造成一些麻烦,这里我通过自己生成https证书,解决本地开发绑定的域名不支持https的问题。

本地生成CA

生成本地CA的密钥rootCA.key(要记住你设置的密码)

Shell

openssl genrsa -des3 -out rootCA.key 2048

1

opensslgenrsa-des3-outrootCA.key2048

用这个密钥进行签名,生成一张CA的证书rootCA.pem这里设置了有效期(1024天),里面可以填下密码,email地址其他的可以留空。

Shell

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

1

opensslreq-x509-new-nodes-keyrootCA.key-sha256-days1024-outrootCA.pem

生成网站数字证书

为了避免chrome的NET::ERR_CERT_COMMON_NAME_INVALID错误,需要在网站证书里填一些额外的信息。

首先创建文件server.csr.cnf

请把emailAddress、CN改为你的邮箱和域名。

[req]

default_bits = 2048

prompt = no

default_md = sha256

distinguished_name = dn

[dn]

C=US

ST=RandomState

L=RandomCity

O=RandomOrganization

OU=RandomOrganizationUnit

emailAddress=yearnfar@gmail.com

CN = hp.dev

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[req]

default_bits=2048

prompt=no

default_md=sha256

distinguished_name=dn

[dn]

C=US

ST=RandomState

L=RandomCity

O=RandomOrganization

OU=RandomOrganizationUnit

emailAddress=yearnfar@gmail.com

CN=hp.dev

然后创建文件v3.ext,请把DNS.1、DNS.2修改为你的域名

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

subjectAltName = @alt_names

[alt_names]

DNS.1 = hp.dev

DNS.2 = *.hp.dev

DNS.3 = localhost

1

2

3

4

5

6

7

8

9

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment

subjectAltName=@alt_names

[alt_names]

DNS.1=hp.dev

DNS.2=*.hp.dev

DNS.3=localhost

用server.csr.cnf配置生成网站证书server.csr,同时生成网站私钥device.key(给nginx用的)

Shell

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout hp.dev.key -config server.csr.cnf

1

opensslreq-new-sha256-nodes-outserver.csr-newkeyrsa:2048-keyouthp.dev.key-configserver.csr.cnf

用CA私钥rootCA.key以CA的名义(rootCA.pem)给网站证书签名,生成CA签名后的证书hp.dev.crt,同时加上v3.ext中的配置,

Shell

openssl x509 -req -in server.csr \

-CA rootCA.pem \

-CAkey rootCA.key \

-CAcreateserial -out hp.dev.crt -days 800 -sha256 -extfile v3.ext

1

2

3

4

opensslx509-req-inserver.csr\

-CArootCA.pem\

-CAkeyrootCA.key\

-CAcreateserial-outhp.dev.crt-days800-sha256-extfilev3.ext

到这里我们就准备好了下一步nginx要用到的两个文件:

hp.dev.key

hp.dev.crt

1

2

hp.dev.key

hp.dev.crt

配置nginx

server {

listen 80;

listen 443 ssl;

server_name lottie.hp.dev;

#charset koi8-r;

access_log logs/hp.dev.access.log main;

ssl_certificate /etc/nginx/ssl/hp.dev.crt;

ssl_certificate_key /etc/nginx/ssl/hp.dev.key;

root /data/www/html/hp.dev/lottie;

index index.html index.htm;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

server{

listen80;

listen443ssl;

server_namelottie.hp.dev;

#charset koi8-r;

access_loglogs/hp.dev.access.logmain;

ssl_certificate/etc/nginx/ssl/hp.dev.crt;

ssl_certificate_key/etc/nginx/ssl/hp.dev.key;

root/data/www/html/hp.dev/lottie;

indexindex.htmlindex.htm;

error_page500502503504/50x.html;

location=/50x.html{

roothtml;

}

}

信任CA证书

如果是mac系统,双击第一步生成rootCA.pem证书把他安装到钥匙串中。

077a19434555f1b239a5cc939d9228c8.png

查看效果

65784ef895c17e7ea4e4f6696444f6d5.png

Firefox使用自己独立的证书管理器(Certificates Manager),并没有像 IE 和 Chrome 那样直接使用系统中的证书存储。所以如果使用Firefox浏览器,我们还需要重新在 Firefox 中添加一回。下面介绍如何将自签发的 SSL 证书导入为 Firefox 中的受信任根证书。

64baf64dbac036683ae77780bdb48723.png

阅 2,892

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值