1.OpenSSL 制作自签名证书

1、安装 OpenSSL 。

[centos@host ~ ]$ sudo dnf install openssl

2、创建 SSL 工作目录。

证书包括 CA 认证机构、服务器和客户端三类证书的制作,在 SSL 工作根目录下分别建立"ca"、"server"、"client"子目录存放对应的输出文件,并设置所有者为证书管理账户。

[centos@host ~ ]$ sudo mkdir -p /data/ssl/ca
[centos@host ~ ]$ sudo mkdir -p /data/ssl/server
[centos@host ~ ]$ sudo mkdir -p /data/ssl/client
[centos@host ~ ]$ sudo chown -R root:root /data/ssl

指令名称chown 改变文件或目录的访问权限

# chown [-R] [用户名称:组名称] [文件或目录] 

1.1.第一阶段:制作 CA 根证书

1、制作 CA【秘钥】。

操作过程:设置 CA 秘钥口令。

[centos@host ~ ]$ openssl genrsa -des3 -out /data/ssl/ca/ca.key 2048

Generating RSA private key, 2048 bit long modulus (2 primes)
................................+++++
............+++++
e is 65537 (0x010001)
Enter pass phrase for /data/ssl/ca/ca.key:      ---(输入123)
Verifying - Enter pass phrase for /data/ssl/ca/ca.key:    ---(输入123)

查看 CA 秘钥文件(需要输入秘钥口令):

[centos@host ~ ] openssl rsa -in /data/ssl/ca/ca.key

Enter pass phrase for /data/ssl/ca/ca.key:    ---(输入123)
......

 

2、制作 CA 【根证书签名申请】。

输入 CA 秘钥文件,输出 CA 根证书签名申请文件。

操作过程:验证 CA 秘钥口令 => 设置国家名称 => 设置省份名称 => 设置城市名称 => 设置组织机构名称 => 设置组织单元名称 => 设置证书名称 => 设置电子邮件地址和扩展属性(密码提示信息和可选的公司名称)。

[centos@host ~ ]$ openssl req -new -key /data/ssl/ca/ca.key -out /data/ssl/ca/ca.csr

Enter pass phrase for /data/ssl/ca/ca.key:    ---(输入123)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sd
Locality Name (eg, city) [Default City]:qd 
Organization Name (eg, company) [Default Company Ltd]:private
Organizational Unit Name (eg, section) []:tz
Common Name (eg, your name or your server's hostname) []:ca
Email Address []:       ---(直接回车)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:          ---(直接回车)
An optional company name []:      ---(直接回车)

注意:【Common Name】应为 CA 机构的名称。

查看 CA 证书申请文件:

[centos@host ~ ]$ openssl req -in /data/ssl/ca/ca.csr -noout -text

3、生成 CA 自签名【根证书】,即对签名申请进行自签名生成证书。

输入 CA 秘钥文件、CA 根证书签名申请,输出 CA 自签名根证书文件。

操作过程:验证 CA 秘钥口令。

[centos@host ~ ]$ openssl x509 -req -days 3650 -signkey /data/ssl/ca/ca.key -in /data/ssl/ca/ca.csr -out /data/ssl/ca/ca.pem

Signature ok
subject=C = cn, ST = sd, L = qd, O = private, OU = tz, CN = ca
Getting Private key
Enter pass phrase for /data/ssl/ca/ca.key:      ---(输入123)

4、导出 CA【 PKCS12 证书】。

输入 CA 自签的 CA 证书文件、CA 秘钥,输出 CA PKCS12 证书。

操作过程:设置 PKCS12 证书口令。

[centos@host ~ ]$ openssl pkcs12 -export -in /data/ssl/ca/ca.pem -inkey /data/ssl/ca/ca.key -out /data/ssl/ca/ca.p12 -name ca

Enter Export Password:            ---(输入123)
Verifying - Enter Export Password:   ---(输入123)

5、查看 CA 产生的全部文件。

[centos@host ~ ]$ ls /data/ssl/ca/
ca.csr  ca.key  ca.p12  ca.pem

1.2.第二阶段:制作服务器证书

1、制作服务器【秘钥】。

操作过程:设置服务器秘钥口令。

[centos@host ~ ]$ openssl genrsa -des3 -out /data/ssl/server/server.key 2048

Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................................+++++
...........+++++
e is 65537 (0x010001)
Enter pass phrase for /data/ssl/server/server.key:     ---(输入123)
Verifying - Enter pass phrase for /data/ssl/server/server.key:   ---(输入123)

查看服务器秘钥文件(需要输入秘钥口令):

[centos@host ~ ] openssl rsa -in /data/ssl/server/server.key

Enter pass phrase for /data/ssl/server/server.key:    ---(输入123)
......

2、制作服务器【证书签名申请】。

输入服务器秘钥文件,输出服务器证书签名申请文件。

操作过程:验证服务器秘钥口令 => 设置国家名称 => 设置省份名称 => 设置城市名称 => 设置组织机构名称 => 设置组织单元名称 => 设置证书名称 => 设置电子邮件地址和扩展属性(密码提示信息和可选的公司名称)。

[centos@host ~ ]$ openssl req -new -key /data/ssl/server/server.key -out /data/ssl/server/server.csr

Enter pass phrase for /data/ssl/server/server.key:      ---(输入123)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sd
Locality Name (eg, city) [Default City]:qd
Organization Name (eg, company) [Default Company Ltd]:private
Organizational Unit Name (eg, section) []:tz
Common Name (eg, your name or your server's hostname) []:192.168.0.209   ---(为服务器ip)
Email Address []:         ---(直接回车)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:             ---(直接回车)
An optional company name []:           ---(直接回车)

注意:【Common Name】应为服务器的 IP 地址或者 DNS(如:192.168.216.128 或者 localhost)。在 在 Web 容器配置后,当客户端使用 HTTPS 协议访问时,如果域名与【Common Name】不一致,则会进行风险提示。

3、生成 CA 签名的服务器【证书】,即 CA 对服务器签名申请进行签名生成服务器证书。

输入 CA 根证书文件、 CA 秘钥文件、服务器证书签名申请,输出 CA 签名的服务器证书文件。

操作过程:验证 CA 秘钥口令。

[centos@host ~ ]$ openssl x509 -req -days 3650 -CA /data/ssl/ca/ca.pem -CAkey /data/ssl/ca/ca.key -CAcreateserial -in /data/ssl/server/server.csr -out /data/ssl/server/server.pem

Signature ok
subject=C = cn, ST = sd, L = qd, O = private, OU = tz, CN = 192.168.0.209
Getting CA Private Key
Enter pass phrase for /data/ssl/ca/ca.key:    ---(输入123)

4、导出服务器【 PKCS12 证书】。

输入 CA 签名的服务器证书文件,输出服务器 PKCS12 证书。

操作过程:验证服务器秘钥口令 => 设置 PKCS12 证书口令。

[centos@host ~ ]$ openssl pkcs12 -export -in /data/ssl/server/server.pem -inkey /data/ssl/server/server.key -out /data/ssl/server/server.p12 -name https_cert

Enter pass phrase for /data/ssl/server/server.key:      ---(输入123)
Enter Export Password:             ---(输入123)
Verifying - Enter Export Password:          ---(输入123)

5、查看服务器产生的全部文件。

[centos@host ~ ]$ ls /data/ssl/server
server.pem  server.csr  server.key  server.p12

1.3.第三阶段:制作客户端证书(双向认证时使用)

1、制作客户端【秘钥】。

操作过程:设置客户端秘钥口令。

[centos@host ~ ]$ openssl genrsa -des3 -out /data/ssl/client/client.key 2048

Generating RSA private key, 2048 bit long modulus (2 primes)
.........+++++
..........+++++
e is 65537 (0x010001)
Enter pass phrase for /data/ssl/client/client.key:     ---(输入123)
Verifying - Enter pass phrase for /data/ssl/client/client.key:    ---(输入123)

查看客户端秘钥文件(需要输入秘钥口令):

[centos@host ~ ] openssl rsa -in /data/ssl/client/client.key

Enter pass phrase for /data/ssl/client/client.key:     ---(输入123)
......

2、制作客户端【证书签名申请】。

输入客户端秘钥文件,输出客户端证书签名申请文件。

操作过程:验证客户端秘钥口令 => 设置国家名称 => 设置省份名称 => 设置城市名称 => 设置组织机构名称 => 设置组织单元名称 => 设置证书名称 => 设置电子邮件地址和扩展属性(密码提示信息和可选的公司名称)。

[centos@host ~ ]$ openssl req -new -key /data/ssl/client/client.key -out /data/ssl/client/client.csr

nter pass phrase for /data/ssl/client/client.key:     ---(输入123)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sd
Locality Name (eg, city) [Default City]:qd
Organization Name (eg, company) [Default Company Ltd]:private
Organizational Unit Name (eg, section) []:tz
Common Name (eg, your name or your server's hostname) []:https_client
Email Address []:      ---(直接回车)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:            ---(直接回车)
An optional company name []:        ---(直接回车)

注意:【Common Name】应为客户端的统一标识。

3、生成 CA 签名的客户端【证书】,即 CA 对客户端签名申请进行签名生成客户端证书。

输入 CA 根证书文件、 CA 秘钥文件、客户端证书签名申请,输出 CA 签名的客户端证书文件。

操作过程:验证 CA 秘钥口令。

[centos@host ~ ]$ openssl x509 -req -days 3650 -CA /data/ssl/ca/ca.pem -CAkey /data/ssl/ca/ca.key -CAcreateserial -in /data/ssl/client/client.csr -out /data/ssl/client/client.pem

Signature ok
subject=C = cn, ST = sd, L = qd, O = private, OU = tz, CN = https_client
Getting CA Private Key
Enter pass phrase for /data/ssl/ca/ca.key:     ---(输入123)

4、导出客户端【 PKCS12 证书】。

输入 CA 签名的客户端证书文件,输出客户端 PKCS12 证书。

操作过程:验证客户端秘钥口令 => 设置 PKCS12 证书口令。

[centos@host ~ ]$ openssl pkcs12 -export -in /data/ssl/client/client.pem -inkey /data/ssl/client/client.key -out /data/ssl/client/client.p12 -name https_client

Enter pass phrase for /data/ssl/client/client.key:   ---(输入123)
Enter Export Password:              ---(输入123)
Verifying - Enter Export Password:             ---(输入123)

5、查看客户端产生的全部文件。

[centos@host ~ ]$ ls /data/ssl/client
client.pem  client.csr  client.key  client.p12

2.Web 容器配置 HTTPS 站点

2.1.Tomcat 配置方案

修改server.xml文件

把默认的8080端口改成80并把redirectPort从8443改为443

 

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

 在文件中的增加以下配置并保存(服务器认证):

<Server>
    <Service>  
        <Connector
            port="443" 
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="150"
            SSLEnabled="true"
            keystoreFile="/data/ssl/server/server.p12"
            keystoreType="PKCS12"
            keystorePass="123">
    </Connector>
    </Service>  
</Server>

 只运行 https,不允许http 则 web.xml 的 welcome-file-list 下面 中添加

<welcome-file-list>
        <welcome-file>/</welcome-file>
</welcome-file-list>

<security-constraint>
        <web-resource-collection>
            <web-resource-name>sslwebsokect</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

 启动/重新启动 Tomcat 。

2.2.Nginx 配置方案

如果使用nginx则需要做如下配置:

http {
    server {
        listen       80;
        listen       443 ssl;

        server_name  localhost;

        # 服务器签名证书文件
        ssl_certificate      /data/ssl/server/server.pem;
        # 服务器秘钥文件
        ssl_certificate_key  /data/ssl/server/server.key;

        # 开启客户端证书认证(双向认证)
        # ssl_verify_client on; 
        # CA 证书(双向认证)
        # ssl_client_certificate /data/ssl/ca/ca.pem;
        

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            ...
        }
    }
}

启动/重新启动 Nginx 服务器。

3.客户端配置

3.1.安装 CA 机构证书

以火狐浏览器为例

centos7搭建ss一键 centos8搭建ssr_其他

centos7搭建ss一键 centos8搭建ssr_centos_02

 centos7搭建ss一键 centos8搭建ssr_centos_03

 centos7搭建ss一键 centos8搭建ssr_https_04

 centos7搭建ss一键 centos8搭建ssr_centos_05

 centos7搭建ss一键 centos8搭建ssr_服务器_06

 完成。

注:不能通过 https://127.0.0.1/ 访问项目要用真实ip访问