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 机构证书
以火狐浏览器为例
完成。
注:不能通过 https://127.0.0.1/ 访问项目要用真实ip访问