Loading

证书服务(三)生成带有SAN扩展的证书

四:openssl生成证书

1.模拟CA

1.1.生成CA根证书私钥,根据你实际需要去生成
有密码:openssl genrsa -des3 -out rootCA.key 4096
无密码:openssl genrsa -out rootCA.key 4096
1.2.生成根证书签名请求文件
openssl req -new -key rootCA.key -out rootCA.csr
1.3.生成CA自签证书
可以用key生成:openssl req -new -x509 -key rootCA.key -out rootCA.crt -days 3650 

也可以用csr文件:openssl req -new -x509 -key rootCA.csr -out rootCA.crt -days 3650

1.4.如果1.1生成了有密码的私钥,也有办法去掉key密码
openssl rsa -in rootCA.key -out rootCA_unpass.key.unsecure

1.5如果想自动化输入证书信息,可以用-subj

openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=ca.jackadam.ml/emailAddress=jackadam@sina.com"
openssl req -new -x509 -key rootCA.key -out rootCA.crt -days 3650  -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=ca.jackadam.ml/emailAddress=jackadam@sina.com"

2.生成服务器证书

2.1生成服务器私钥

openssl genrsa -out server.key 4096

2.2生成服务器签名请求

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=server.jackadam.ml/emailAddress=jackadam@sina.com"

2.3用CA签名

openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 3650

3.生成客户端证书

3.1生成服务器私钥

openssl genrsa -out client.key 4096

3.2生成服务器签名请求

openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=client.jackadam.ml/emailAddress=jackadam@sina.com"

3.3用CA签名

openssl x509 -req -in client.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out client.crt -days 3650

4.查看证书

五:NGINX配置证书

1.docker运行nginx

docker-compose:

version: '3.5'

services:
    nginx:
        image: nginx
        container_name: nginx
        restart: always
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./templates:/etc/nginx/templates
            - ./cert:/etc/nginx/cert
        privileged: true
        network_mode: "bridge"
        environment:
           - NGINX_HOST=server.jackadam.ml
           - NGINX_PORT=80
./templates/example.conf.template
server {
    # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
    listen       443 ssl;
    # 域名,多个以空格分开
    server_name  server.jackadam.ml;

    # ssl证书地址
    ssl_certificate    /etc/nginx/cert/server.crt;  # pem文件的路径
    ssl_certificate_key  /etc/nginx/cert/server.key; # key文件的路径

    # ssl验证相关配置
    ssl_session_timeout  5m;    #缓存有效期
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;    #安全链接可选的加密协议
    ssl_prefer_server_ciphers on;   #使用服务器端的首选算法

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

cert目录:

2.尝试HTTP方式进行IP访问

 

 

3.尝试HTTPS方式进行IP访问

 

 

 

 需要安装CA证书,才能验证,

4.安装CA证书

将rootCA.crt复制到本地电脑,双击即可安装。

 

 

 

 

5.还有问题

 

 

 

chrome中F12即可看到错误信息

 

 缺少Subject Alternative Name(SAN)

6.尝试域名访问

 

 

六:SAN证书

1.什么是san证书

SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。

 

 现在都SAN了,看来我们自己生成证书缺少这一项,所以在现在安全条件下,被认为不安全了。

2.生成带SAN扩展的证书请求文件

openssl req -new -sha256 -key server.key \
    -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=server.jackadam.ml/emailAddress=jackadam@sina.com" \
    -extensions v3_req \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[req]\nreq_extensions = req_ext\n[req_ext]\nsubjectAltName=DNS:server.jackadam.ml")) \
    -out SANserver.csr 

查看两个证书请求的区别:

    openssl req -noout -text -in server.csr
    openssl req -noout -text -in SANserver.csr

 

3.签名证书

openssl ca -in SANserver.csr \
    -policy policy_anything \
    -cert  rootCA.crt \
    -keyfile rootCA.key \
    -batch \
    -extensions SAN \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[SAN]\nsubjectAltName=DNS:server.jackadam.ml")) \
    -out ./SANserver.crt

openssl,说是不从请求中获取SAN扩展,还得手动配置,为了安全?

不过我从windowsCA服务器中,用请求文件签发证书,是会包含请求中的SAN扩展。

4.查看SAN证书

openssl x509 -text -noout -in SANserver.crt

5.更新nginx证书

 

 有了使用者可选名称,这个证书就算是合格的证书了。

 

posted @ 2022-05-11 20:59  上官飞鸿  阅读(1669)  评论(0编辑  收藏  举报