九析带你轻松完爆 openssl 自签名证书

目录

1 创建证书

    1.1 验证 openssl

    1.2 创建私钥

    1.3 私钥免密

    1.4 申请证书

    1.5 签署证书

2 使用证书

    2.1 安装 docker

    2.2 下载 nginx 镜像

    2.3 启动 nginx 容器

    2.4 编辑 conf 配置

    2.5 配置 nginx 容器

    2.6 热启动 nginx

    2.7 设置本地 dns

    2.8 验证证书


1 创建证书

1.1 验证 openssl

        首先验证 openssl 是否安装。

openssl version

1.2 创建私钥

openssl genrsa -des3 -out server.priv.key 2048

        该命令有两个作用。第一:生成长度为 2048(bit long)的非对称私钥;第二:将非对称私钥再经过对称加密算法 des3 二次加密后生成 server.priv.key 文件。

1.3 私钥免密

        执行上步操作会被要求输入密码,为了后续操作方便,执行如下命令去除密码。

openssl rsa -in server.priv.key -out server.key

1.4 申请证书

openssl req -new -in server.key -out server.csr -subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=zcy/OU=Arch/CN=zcy.jiuxi.org"

        就像你去银行申请银行卡要填写申请单和设置交易密码一样,上面的命令是向 CA(证书签发机构,我们这里是 openssl ) 提交一个网站证书的申请,申请内容是你的个人信息(比如:国家/省/市/单位/部门/网站域名)和私钥信息。

        参数说明:

字段值

字段含义

范例

/C=

Country(国家)

CN

/ST=

State(省)

Zhejiang

/L=

Location(市)

Hangzhou

/O=

Organization(企业)

zcy

/OU=

Organization Unit(部门)

Arch

/CN

Common Name(域名或者IP均可)

zcy.jiuxi.org

        上面最重要的参数就是CN,也就是域名,你就是为该域名去申请证书,至于其他参数,你想填就填,可以随风一点。

1.5 签署证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

        上面命令会生成一个符合 X.509 规范的证书。X.509 是一种标准,该标准定义了证书中应该包含哪些信息,比如版本号、序列号、签名算法、颁布者、有效期、公钥、公钥算法、签名值等。虽然你打开 cert.crt 证书查看是一堆看不懂的乱码,但实际这些乱码的内容就是我上述描述的 x.509 证书所规定的要填写的那些内容。

        自此,zcy.jiuxi.org 这个域名的证书申请和签发过程就已经全部完成了。在该过程中,你用 openssl 演了一出戏,自己向自己申请,自己给自己签发,有点过家家的感觉。在生产环境上,你可不能这么任性和随风,需购买和使用权威机构认证和颁发的证书。不能自己随便瞎签,否则很容易被你深爱的领导轻松完爆。


2 使用证书

        接下来用 nginx 启动 web 服务(zcy.jiuxi.org),并将上面申请的证书与该服务域名进行绑定。nginx 运行在 Docker 容器中。

2.1 安装 docker

        请参阅本人的《Docker 一分钟轻松完爆》来安装 Docker。

2.2 下载 nginx 镜像

docker pull nginx:1.16

2.3 启动 nginx 容器

docker run -itd --name nginx  -p 443:443 --rm nginx:1.16

2.4 编辑 conf 配置

        新建 default.conf 文件,添加 nginx server 证书信息:

server {

    listen 443 ssl;

    server_name zcy.jiuxi.org;

    ssl_certificate /etc/nginx/server.crt;

    ssl_certificate_key /etc/nginx/server.key;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

    ssl_prefer_server_ciphers on;

    location / {

        root /usr/share/nginx/html;

        index index.html;

    }

}

2.5 配置 nginx 容器

        将配置文件 default.conf、server.crt (证书)和 server.key (私钥)拷贝进容器。

docker cp server.key nginx:/etc/nginx

docker cp server.crt nginx:/etc/nginx

docker cp default.conf nginx:/etc/nginx/conf.d

2.6 热启动 nginx

docker exec -it nginx /bin/bash

        执行上面命令登录 nginx 容器,然后在容器中热启动 nginx:

nginx -s reload

2.7 设置本地 dns

        编辑 /etc/hosts 文件,根据个人具体情况指定 dns 信息。

127.0.0.1 zcy.jiuxi.org

2.8 验证证书

        打开 safari 浏览器,本人是 mac 电脑。输入 https://zcy.jiuxi.org:

1.png

        选择“显示详细信息”按钮,如下图所示:

2.png

        点击“查看此证书”,可以看到x509证书的信息格式以及你的申请信息:

3.png

        查看完证书信息后,点击“访问此网站”:

image4.png

        选择“访问网站“按钮,并输入你个人 mac 的使用密码:

image5.png

        操作完成后,轻松完爆自签名证书的认证:

image6.png

        打开你的“钥匙串访问”,搜索 zcy,发现你自签证书已经被添加:

image7.png

猜你喜欢

转载自blog.51cto.com/14625168/2458663