【CentOS 7LNMP架构32】,ssl原理和生成ssl密钥对#

本文详细解析了SSL/TLS协议的工作原理,包括客户端与服务器间如何通过公钥和私钥进行安全通信的过程。同时,文章还介绍了如何在本地环境中生成自签名证书,包括创建私钥、生成证书请求文件以及最终生成公钥文件的步骤。

shallow丿ove


ssl原理

  • 客户端的浏览器发送一个https的请求给服务器
  • 服务器要有一套数字证书,生成公钥和私钥,将公钥传递到客户端
  • 客户端的浏览器检查公钥是否合法,若不合法显示https警告,若合法生成一串随机字符串,并用收到的公钥加密
  • 客户端把加密后的随机字符串传输到服务器
  • 服务器收到加密随机字符串后,先用私钥解密获取到数据,服务器再把这串随机字符串加密后的数据传输给客户端
  • 客户端收到数据后,再用自己的私钥也就是随机字符串解密得到信息

生成ssl密钥对

  • cd /usr/local/nginx/conf
  • openssl genrsa -des3 -out tmp.key 2048 #key文件为私钥
  • openssl rsa -in tmp.key -out aminglinux.key #转换key,取消密码
  • rm -f tmp.key
  • openssl req -new -key aminglinux.key -out aminglinux.csr #生成证书请求文件,需要拿这个文件和密钥一起生产公钥文件
  • openssl x609 -req -days 365 -in aminglinux.csr -singkey aminglinux.key -out aminglinux.crt
  • 这里的aminglinux.crt为公钥
[root@localhost vhost]# cd /usr/local/nginx/conf/
[root@localhost conf]# rpm -qf `which openssl`
openssl-1.0.2k-8.el7.x86_64
[root@localhost conf]# openssl genrsa -des3 -out tmp.key 2048
Generating RSA private key, 2048 bit long modulus
........................+++
......................................+++
e is 65537 (0x10001)
Enter pass phrase for tmp.key:
Verifying - Enter pass phrase for tmp.key:

至少4位

[root@localhost conf]# openssl rsa -in tmp.key -out user.key
Enter pass phrase for tmp.key:
writing RSA key
[root@localhost conf]# rm -f tmp.key 

Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            rc5               rc5-cbc           rc5-cfb           
rc5-ecb           rc5-ofb           seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          zlib

自定义证书

[root@localhost conf]# openssl req -new -key user.key -out user.csr
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]:11
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:MC
Organizational Unit Name (eg, section) []:user
Common Name (eg, your name or your server's hostname) []:user
Email Address []:user@user.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:user
An optional company name []:user

[root@localhost conf]# openssl x509 -req -days 365 -in user.csr -signkey user.key -out user.crt
Signature ok
subject=/C=11/ST=BeiJing/L=Beijing/O=MC/OU=user/CN=user/emailAddress=user@user.com
Getting Private key
[root@localhost conf]# ls user.
user.crt  user.csr  user.key 

转载于:https://my.oschina.net/u/3892756/blog/3069418

<think>我们正在为在CentOS 7上搭建LNMP架构提供步骤指导。根据引用[1][4],我们可以整理出以下步骤。同时,引用[2]提供了CentOS 7搭建LNMP的实战经验,引用[3]则说明了LNMP逐渐流行的背景。 注意:LNMP代表Linux, Nginx, MySQL, PHP。我们将按照以下步骤进行: 1. 准备编译环境(安装依赖) 2. 安装Nginx 3. 安装MySQL(这里我们使用MariaDB,因为CentOS 7默认支持) 4. 安装PHP 5. 配置Nginx 6. 配置MySQL 7. 配置PHP 8. 测试 由于引用[4]中提到了安装PHP的依赖,我们将详细列出。 步骤详细说明: 步骤一:准备编译环境 安装必要的工具依赖包,这些是编译运行Nginx、MySQL、PHP所必需的。 步骤二:安装Nginx 我们将从官方源安装Nginx。 步骤三:安装MySQL 在CentOS 7中,我们可以安装MariaDB作为MySQL的替代品,因为MariaDB是MySQL的一个分支,完全兼容。 步骤四:安装PHP 我们将安装PHP 7.3(根据引用[4]的版本),但也可以根据需求选择其他版本。 步骤五:配置Nginx 配置Nginx以处理PHP请求。 步骤六:配置MySQL 设置MySQL的安全选项,包括设置root密码等。 步骤七:配置PHP 配置PHP以与NginxMySQL协同工作。 步骤八:测试 创建一个PHP测试文件,通过浏览器访问以验证LNMP环境是否搭建成功。 下面我们开始详细步骤:</think>### CentOS 7 搭建 LNMP 架构详细步骤 #### 一、环境准备 1. **更新系统** ```bash sudo yum update -y sudo yum install epel-release -y # 安装EPEL仓库 ``` 2. **安装编译依赖** ```bash sudo yum groupinstall "Development Tools" -y sudo yum install gcc make pcre-devel zlib-devel openssl-devel \ libxml2-devel libcurl-devel libjpeg-devel libpng-devel \ freetype-devel openldap-devel libmcrypt-devel -y # [^4] ``` #### 二、安装Nginx 1. **添加官方仓库** ```bash sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ``` 2. **安装并启动** ```bash sudo yum install nginx -y sudo systemctl start nginx sudo systemctl enable nginx ``` 3. **验证安装** 浏览器访问 `http://服务器IP` 出现Nginx欢迎页即成功 #### 三、安装MySQL/MariaDB 1. **安装MariaDB** ```bash sudo yum install mariadb-server mariadb -y ``` 2. **启动并配置** ```bash sudo systemctl start mariadb sudo systemctl enable mariadb sudo mysql_secure_installation # 设置root密码等安全选项 ``` #### 四、安装PHP 7.3 1. **添加Remi仓库** ```bash sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y sudo yum-config-manager --enable remi-php73 ``` 2. **安装PHP及扩展** ```bash sudo yum install php php-fpm php-mysqlnd php-opcache php-gd \ php-xml php-mbstring php-curl -y # [^4] ``` 3. **修改PHP配置** ```bash sudo vi /etc/php-fpm.d/www.conf # 修改以下参数: user = nginx group = nginx listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx ``` 4. **启动PHP-FPM** ```bash sudo systemctl start php-fpm sudo systemctl enable php-fpm ``` #### 五、配置Nginx支持PHP 1. **修改Nginx配置** ```bash sudo vi /etc/nginx/conf.d/default.conf ``` ```nginx server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 2. **重启服务** ```bash sudo systemctl restart nginx sudo systemctl restart php-fpm ``` #### 六、测试LNMP环境 1. **创建测试文件** ```bash sudo vi /usr/share/nginx/html/info.php ``` ```php <?php phpinfo(); ?> ``` 2. **访问测试页** 浏览器打开 `http://服务器IP/info.php` 应显示PHP配置信息页面,包含MySQL模块信息 #### 七、防火墙配置 ```bash sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload ``` #### 八、高可用扩展建议 1. **数据库主从复制** 参考引用[2]配置MySQL主从集群 ```ini # DB-master的my.cnf [mysqld] server-id=1 log-bin=mysql-bin ``` 2. **Nginx负载均衡** ```nginx upstream backend { server web1_ip; server web2_ip; } server { location / { proxy_pass http://backend; } } ``` 3. **共享存储** 使用NFS实现多Web节点共享存储(参考引用[2]) > 完整搭建流程约需20-30分钟,生产环境建议添加SSL证书防火墙规则[^1][^2] --- ### 常见问题排查 1. **502 Bad Gateway错误** - 检查`php-fpm.sock`路径是否匹配 - 运行`sudo systemctl status php-fpm`查看服务状态 2. **PHP无法连接MySQL** - 确认安装`php-mysqlnd`扩展 - 检查MySQL用户远程访问权限 3. **静态文件无法访问** - 验证`/usr/share/nginx/html`目录权限 - 执行`sudo chown -R nginx:nginx /usr/share/nginx/html` [^1]: 手动搭建LNMP环境流程 [^2]: CentOS7高可用LNMP架构实现 [^4]: PHP环境依赖安装
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值