mkcert生成自签名证书

将网络模式设置成桥接模式:

由于是通过Vmare虚拟机部署的Nginx服务,而虚拟机默认的NAT模式是不支持其他机器进行访问的,即只能本机访问(虚拟机或本机),所以要把他改成桥接模式,然后重启虚拟机,之后查看网卡的地址,这个地址稍后有大用,后面的nginx.conf和Dockerfile文件都用到了这个ip地址:

ifconfig
192.168.10.224

安装mkcert,用于生成自签名证书:

# 安装mkcert
sudo wget --no-check-certificate  https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64

sudo mv mkcert-v1.4.3-linux-amd64 /usr/local/bin/mkcert

sudo chmod +x /usr/local/bin/mkcert

mkcert -install

# 利用mkcert生成自签名证书,输出:localhost-key.pem localhost.pem
mkcert localhost

# 指定生成名称
mkcert -cert-file fd.pem -key-file fd-key.pem localhost

# 也可以同时为多个域名生成证书
mkcert -cert-file fd.pem -key-file fd-key.pem localhost 127.0.0.1

编辑nginx.conf文件,添加常用配置:

sudo mkdir /home/pc/Nginx
sudo chmod 777 /home/pc/Nginx
sudo vim /home/pc/Nginx/nginx.conf
# nginx.conf

events {
    use epoll;
    worker_connections 65535;
}

http{
    server {
        listen 80;
        server_name localhost 192.168.10.224;

        listen 443 ssl;
        ssl_certificate /pem/fd.pem;
        ssl_certificate_key /pem/fd-key.pem;
        ssl_session_cache shared:SSL:1m;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_prefer_server_ciphers on;


        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

编写Dockerfile文件:

sudo vim /home/pc/Nginx/Dockerfile
# 使用官方的NGINX镜像作为基础镜像
FROM nginx

# 将本地的NGINX配置文件复制到容器中
COPY nginx.conf /etc/nginx/nginx.conf


# 安装mkcert,用于生成自签名证书
RUN apt-get update \
    && apt-get install -y wget \
    && wget --no-check-certificate  https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 \
    && mv mkcert-v1.4.3-linux-amd64 /usr/local/bin/mkcert \
    && chmod +x /usr/local/bin/mkcert \
    && mkcert -install \
    && mkdir /pem \
    && cd /pem \
    && mkcert -cert-file fd.pem -key-file fd-key.pem localhost 192.168.10.224

构建Docker镜像:

docker build -f /home/pc/Nginx/Dockerfile -t m_nginx_img /home/pc/Nginx/

运行NGINX容器:

docker run --name=Nginx -d -p 80:80 -p 443:443 --restart=always m_nginx_img

docker run --name=Nginx -p 80:80 -p 443:443 -v /home/pc/Nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/pc/Nginx/log/:/var/log/nginx/ -d --restart=always m_nginx_img

docker run --name=Nginx -p 80:80 -p 443:443 -v /home/pc/Nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/pc/Nginx/log/:/var/log/nginx/ m_nginx_img

docker exec -it Nginx bash

验证NGINX部署:

http://localhost
https://localhost

将生成的证书从容器中拷贝出来备用:

docker cp Nginx:/pem/fd.pem /home/pc/Nginx/fd.pem

然后我们可以再通过shell客户端将Nginx/fd.pem拷贝到我们的电脑上

as配置CA证书:

若不配置服务器CA证书的话,则as访问https会报错。
先将 服务器提供的CA 证书拷贝到 res/raw/ 目录下
再在 `res/xml/` 目录下创建 `network_security_config.xml` 文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <!-- 引入 CA 证书 -->
        <trust-anchors>
            <certificates src="@raw/证书名(不含后缀,比如.pem)"/>
        </trust-anchors>
    </base-config>
</network-security-config>

注意填入的证书名称不要包含扩展名,比如fd.pem,则只需填入@raw/fd
高版本的as会不允许直接返回http,cleartextTrafficPermitted="true"的作用可以使得能正常访问http地址。

再在 `AndroidManifest.xml` 中应用网络安全性配置:

android:networkSecurityConfig="@xml/network_security_config"

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ...>
    ...
</application>

或者直接用本地已经生成好的CA,由于本地和容器内的环境不一致,本地生成的证书放到容器内会出现解析出错,最好不要用下面这种方式,而是通过docker容器内部生成:

#Dockerfile
# 使用官方的NGINX镜像作为基础镜像
FROM nginx

# 将本地的NGINX配置文件复制到容器中
COPY nginx.conf /etc/nginx/nginx.conf

RUN mkdir /pem

# 将提前生成好的CA证书拷贝进容器
COPY localhost-key.pem localhost.pem /pem

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容