openssl双向认证 tomcat_linux下Tomcat+OpenSSL配置单向&双向认证(自制证书)

本文详述了在CentOS6.8上为Apache Tomcat 7.0.63配置OpenSSL单向及双向认证的步骤,包括升级OpenSSL到1.1.0c,创建根证书、服务端证书和客户端证书,以及在Tomcat中配置keystore和truststore文件的过程。
摘要由CSDN通过智能技术生成

背景

由于ios将在2017年1月1日起强制实施ATS安全策略,所有通讯必须使用https传输,本文只针对自制证书,但目前尚不确定自制证书是否能通过appstore审核。

1、必须支持传输层安全(TLS)协议1.2以上版本

2、证书必须使用SHA256或更高的哈希算法签名

3、必须使用2048位以上RSA密钥或256位以上ECC算法等等

4、证书必须是V3版本

以上是几个注意点。主要针对ios的ATS策略

环境

linux: CentOS6.8

tomcat: Apache Tomcat/7.0.63

OpenSSL: OpenSSL 1.1.0c

OpenSSL升级(如果需要)

我使用的是阿里云服务器,linux自带OpenSSL,只需要做一次升级,关于全新安装请自行搜索。

1.查看版本

openssl version -a

2.更新zlib

yum install -y zlib

3.下载(注意cd到自己需要的路径下)

wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz

4.解压安装

tar zxf openssl-1.1.0c.tar.gz

cd openssl-1.1.0c

./config --prefix=/usr/local/openssl

make

make install

//重命名原来的openssl

mv /usr/bin/openssl /usr/bin/openssl.ori

mv /usr/include/openssl /usr/include/openssl.ori

//将安装好的openssl命令软连到对应位置

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/openssl/include/openssl /usr/include/openssl

//在/etc/ld.so.conf文件中写入openssl库文件的搜索路径

echo /usr/local/openssl/lib >> /etc/ld.so.conf

ldconfig -v

openssl version -a

创建证书目录

//进入tmp目录

cd /tmp

//创建ca目录,存放证书相关文件

mkdir ca

//进入ca

cd ca

制作根证书

1. 创建根证书密钥文件(自己做CA) root.key

openssl genrsa -des3 -out root.key 2048

输出内容为:

Generating RSA private key, 2048 bit long modulus

.....................................................................................................................+++

..........................+++

e is 65537 (0x010001)

Enter pass phrase for root.key: ← 输入一个新密码

Verifying – Enter pass phrase for root.key: ← 重新输入一遍密码

2. 创建根证书的申请文件 root.csr

openssl req -new -key root.key -out root.csr

输出内容为:

Enter pass phrase for root.key: ← 输入前面创建的密码

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) [AU]:CN ← 国家代号,中国输入CN

State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音

Locality Name (eg, city) []:BeiJing ← 市的全名,拼音

Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名

Organizational Unit Name (eg, section) []: ← 可以不输入

Common Name (eg, YOUR name) []: ← 此时不输入

Email Address []:admin@mycompany.com ← 电子邮箱,可随意填

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []: ← 可以不输入

An optional company name []: ← 可以不输入

3. 创建一个自当前日期起为期十年的根证书 root.crt

openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_ca -signkey root.key -in root.csr -out root.crt

输出内容为:

Signature ok

subject=/C=CN/ST=BeiJing/L=BeiJing/O=MyCompany Corp./emailAddress=admin@mycompany.com

Getting Private key

Enter pass phrase for root.key: ← 输入前面创建的密码

4.根据CA证书生成truststore JKS文件 root.truststore

//这一步只针对双向认证,单向不需要

keytool -keystore root.truststore -keypass 123456 -storepass 123456 -alias ca -import -trustcacerts -file /tmp/ca/root.crt

键入回事后,提示是否信息此证书,输入yes, 则生成truststore成功

制作service服务器端证书

1.创建服务器证书密钥 server.key

openssl genrsa -des3 -out server.key 2048

输出内容为:

Generating RSA private key, 2048 bit long modulus

...........................+++

...............+++

e is 65537 (0x010001)

Enter pass phrase for server.key: ← 输入前面创建的密码

Verifying - Enter pass phrase for server.key: ← 重新输入一遍密码

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!

去除key文件口令的命令:

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

2.创建服务器证书的申请文件 server.csr

openssl req -new -key server.key -out server.csr

输出内容为:

Enter pass phrase for server.key: ← 输入前面创建的密码

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) [AU]:CN ← 国家名称,中国输入CN

State or Province Name (full name) [Some-State]:BeiJing ← 省名,拼音

Locality Name (eg, city) []:BeiJing ← 市名,拼音

Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名

Organizational Unit Name (eg, section) []: ← 可以不输入

Common Name (eg, YOUR name) []:www.xxx.com ← 服务器主机名(或者IP),若填写不正确,浏览器会报告证书无效,但并不影响使用

Email Address []:admin@mycompany.com ← 电子邮箱,可随便填

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []: ← 可以不输入

An optional company name []: ← 可以不输入

3.创建自当前日期起有效期为期十年的服务器证书 server.crt

openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in server.csr -out server.crt

输出内容为:

Signature ok

subject=/C=CN/ST=BeiJing/L=BeiJing/O=MyCompany Corp./CN=www.mycompany.com/emailAddress=admin@mycompany.com

Getting CA Private Key

Enter pass phrase for root.key: ← 输入前面创建的密码

4.导出.p12文件 server.p12

openssl pkcs12 -export -in /tmp/ca/server.crt -inkey /tmp/ca/server.key -out /tmp/ca/server.p12 -name "server"

根据命令提示,输入server.key密码,创建p12密码。

5.将.p12 文件导入到keystore JKS文件 server.keystore

keytool -importkeystore -v -srckeystore /tmp/ca/server.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore /tmp/ca/server.keystore -deststoretype jks -deststorepass 123456

这里srcstorepass后面的123456为server.p12的密码deststorepass后的123456为keyStore的密码

制作client客户端证书

1.创建客户端证书密钥文件 client.key

openssl genrsa -des3 -out client.key 2048

输出内容为:

Generating RSA private key, 2048 bit long modulus

...............................+++

.........................+++

e is 65537 (0x010001)

Enter pass phrase for client.key: ← 输入一个新密码

Verifying – Enter pass phrase for client.key: ← 重新输入一遍密码

2.创建客户端证书的申请文件 client.csr

openssl req -new -key client.key -out client.csr

输出内容为:

Enter pass phrase for client.key: ← 输入上一步中创建的密码

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) [AU]:CN ← 国家名称,中国输入CN

State or Province Name (full name) [Some-State]:BeiJing ← 省名称,拼音

Locality Name (eg, city) []:BeiJing ← 市名称,拼音

Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名

Organizational Unit Name (eg, section) []: ← 可以不填

Common Name (eg, YOUR name) []:Lenin ← 自己的英文名,可以随便填

Email Address []:admin@mycompany.com ← 电子邮箱,可以随便填

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []: ← 可以不填

An optional company name []: ← 可以不填

3.创建一个自当前日期起有效期为十年的客户端证书 client.crt

openssl x509 -req -days 3650 -sha256 -extfile /usr/local/openssl/ssl/openssl.cnf -extensions v3_req -CA root.crt -CAkey root.key -CAcreateserial -in client.csr -out client.crt

输出内容为:

Signature ok

subject=/C=CN/ST=BeiJing/L=BeiJing/O=MyCompany Corp./CN=www.mycompany.com/emailAddress=admin@mycompany.com

Getting CA Private Key

Enter pass phrase for root.key: ← 输入上面创建的密码

4.导出.p12文件 client.p12

openssl pkcs12 -export -in /tmp/ca/client.crt -inkey /tmp/ca/client.key -out /tmp/ca/client.p12 -name "client"

根据命令提示,输入client.key密码,创建p12密码。

解释

名称

crt证书

只含有公钥

p12证书

是包含证书(含公钥)和私钥

JKS(Java key store)

存放密钥的容器。.jks .keystore .truststore等

KeyStore

服务器的密钥存储库,存服务器的公钥私钥证书

TrustStore

服务器的信任密钥存储库,存CA公钥

单向认证需要文件

名称

root.crt

客户端使用的CA根证书

server.keystore

服务端证书存放的容器

双向认证需要文件

名称

root.crt

客户端使用的CA根证书

client.p12

客户端证书包含私钥

root.truststore

CA公钥存放到受信赖的容器

server.keystore

服务端证书存放的容器

单向认证

客户端只需要安装root.crt这个CA根证书

服务器端配置server.keystore

配置Tomcat

1.关闭tomcat

tomcat的bin目录下执行

shutdown.sh

2.将keystore文件(server.keystore) 放在web服务器上

cp /tmp/ca/server.keystore /你的tomcat根目录/conf

3.修改server.xml配置文件

cd /你的tomcat根目录/conf

vi server.xml

找到下面被注释的代码,删除注释符并修改内容(vi命令操作)

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

keystoreFile="/你的tomcat根目录/conf/server.keystore"

keystorePass="123456"

clientAuth="false" sslEnabledProtocols="TLSv1.2"

ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

TLS_RSA_WITH_AES_128_CBC_SHA256,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,

TLS_RSA_WITH_3DES_EDE_CBC_SHA,

TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

4.启动tomcat

tomcat的bin目录下执行

startup.sh

5.访问https服务

https://localhost:8443/

https://192.168.1.1:8443/ 你的IP

双向认证

客户端需要安装root.crt这个CA根证书,client.p12这个客户端证书

服务器端配置server.keystore,root.truststore

配置Tomcat

1.关闭tomcat

tomcat的bin目录下执行

shutdown.sh

2.将keystore文件(server.keystore) 放在web服务器上

cp /tmp/ca/server.keystore /你的tomcat根目录/conf

将truststore文件(root.truststore) 放在web服务器上

cp /tmp/ca/root.truststore /你的tomcat根目录/conf

3.修改server.xml配置文件

cd /你的tomcat根目录/conf

vi server.xml

找到下面被注释的代码,删除注释符并修改内容(vi命令操作)

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

keystoreFile="/你的tomcat根目录/conf/server.keystore"

keystorePass="123456"

truststoreFile="/你的tomcat根目录/conf/root.truststore"

truststorePass="123456"

clientAuth="true" sslEnabledProtocols="TLSv1.2"

ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

TLS_RSA_WITH_AES_128_CBC_SHA256,

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,

TLS_RSA_WITH_3DES_EDE_CBC_SHA,

TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

注意!clientAuth为true。这里和单向的不同。

4.启动tomcat

tomcat的bin目录下执行

startup.sh

5.访问https服务

https://localhost:8443/

https://192.168.1.1:8443/ 你的IP

完成。可以让你的前端通过https协议访问你的接口了,注意此时的接口是8443.

ios开发

参考文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值