Angus's Blog
Please just enjoy your life!
Toggle navigation
Angus's Blog
Home
About Me
Archives
Tags
OpenSSL 自签发证书
2023-03-28 10:28:04
57
0
0
admin
# OpenSSL 自签发证书 ## 1. SSL 认证方式 * 无认证:双方都不校验对方合法性,通信过程加密 * 单向认证:客户端验证服务器的合法性,服务器不验证客户端 * 双向认证:客户端验证服务器合法性、服务器也会验证客户端合法性 ## 2. SSL 秘钥 * 私钥: 不对外开放,持有端用于解密通信内容 * 公钥:对外开放,对方用公钥加密数据和自己通信 * CA证书:在公钥的基础上增加签名,由权威机构签发,保证公钥的合法性 ## 3. 创建证书 生成私钥: ``` openssl genrsa -out server.key 2048 //算法生成私钥 openssl rsa -text -in server.key //查看私钥内容 ``` 创建公钥: ``` openssl req -new -key server.key -out server.csr //创建公钥 openssl req -text -in server.csr -noout //查看公钥 ``` 创建公钥时输入内容说明: ``` Country Name (2 letter code) []:CN // 输入国家代码,中国填写 CN State or Province Name (full name) []:Tianjin // 输入省份 Locality Name (eg, city) []:Tianjin // 输入城市 Organization Name (eg, company) []:company // 输入组织机构(或公司名) Organizational Unit Name (eg, section) []:section // 输入机构部门 Common Name (eg, fully qualified host name) []:*.abc.com // 输入域名 Email Address []:email@abc.com // 输入邮箱地址 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 // 你的证书密码,如果不想设置密码,可以直接回车 ``` 签发自己证书: ``` openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt //签发证书 openssl x509 -in server.crt -noout -text //查看证书 ``` ## 4. 连接测试 服务端: ``` openssl s_server -accept 913 -key server.key -cert server.crt -debug ``` 客户端: ``` openssl s_client -connect localhost:913 -CAfile server.crt -showcerts -debug //单向验证 ``` 参数说明: * host host:设置服务地址。 * port port:设置服务端口,默认为4433。 * connect host:port:设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433。 * verify depth:设置证书的验证深度。记得CA也是分层次的吧?如果对方的证书的签名CA不是Root CA,那么你可以再去验证给该CA的证书签名的CA,一直到Root CA. 目前的验证操作即使这条CA链上的某一个证书验证有问题也不会影响对更深层的CA的身份的验证。所以整个CA链上的问题都可以检查出来。当然CA的验证出问题并不会直接造成连接马上断开,好的应用程序可以让你根据验证结果决定下一步怎么走。 * cert filename:使用的证书文件。如果server不要求要证书,这个可以省略。 * certform DER|PEM:证书的格式,一般为DER和PEM。默认为PEM格式。 * key filename:使用的证书私钥文件。 * keyform DER|PEM:证书私钥文件的格式,一般为DER和PEM。默认为PEM格式。 * pass arg:私钥保护口令来源,比如:-pass file:pwd.txt,将私钥保护口令存放在一个文件中,通过此选项来指定,不需要用户来输入口令。 * CApath directory:设置信任CA文件所在路径,此路径中的ca文件名采用特殊的形式:xxx.0,其中xxx为CA证书持有者的哈希值,它通过x509 -hash命令获得。 * CAfile filename:某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。 * reconnect:使用同样的session-id连接同一个server五次,用来测试server的session缓冲功能是否有问题。 * pause:每当读写数据时,sleep 1秒。 * showcerts:显示整条server的证书的CA的证书链。否则只显示server的证书。 * debug:打印所有的调试信息。 * msg:用16进制显示所有的协议数据。 * state:打印SSL session的状态, ssl也是一个协议,当然有状态。 * nbio_test:检查非阻塞socket的I/O运行情况。 * nbio:使用非阻塞socket。 * crlf:把在终端输入的换行回车转化成/r/n送出去。 * ign_eof:当输入文件到达文件尾的时候并不断开连接。 * no_ign_eof:当输入文件到达文件尾的时候断开连接。 * quiet:不打印出session和证书的信息。同时会打开-ign_eof这个选项。 * ssl2、-ssl3、-tls1_1、-tls1_2、-tls1、-dtls1、-no_ssl2、-no_ssl3、-no_tls1、-no_tls1_1、-no_tls1_2:使用的协议状态值。 * bugs:兼容老版本服务端的中的bug。 * cipher cipherlist:由我们自己来决定选用什么加密算法,尽管是由server来决定使用什么算法列表,但它一般都会采用我们送过去的cipher列表里的第一个cipher。 * starttls protocol:protocol可以为smtp或pop3,用于邮件安全传输。 * engine id:硬件引擎。 * tlsextdebug:打印TLS协议中服务器端接收到的额外信息值。 * no_ticket:不支持RFC4507bis会话类型。 * sess_out filename:输出SSL会话信息值到filename中。 * sess_in filename:从filename中获取SSL Session值。 * rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。
Pre:
非root用户使用1024以下端口(Linux的Capabilities)
Next: No Post
0
likes
57
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Table of content