前言:
现在大家对“openssl查看cert文件”大致比较看重,兄弟们都需要分析一些“openssl查看cert文件”的相关资讯。那么小编同时在网摘上汇集了一些对于“openssl查看cert文件””的相关文章,希望各位老铁们能喜欢,小伙伴们快快来学习一下吧!cert-manager是一个证书生命周期管理系统,支持证书的申请、部署等功能。您可以使用cert-manager颁发ASM网关的证书,从而可以使用HTTPS协议通过ASM网关访问服务,保证数据传输的安全。本文介绍如何使用cert-manager管理网关的证书。
背景信息
cert-manager支持签发自签名证书和DNS域名证书,从而可以使用HTTPS协议通过ASM网关访问服务。这两种证书的区别如下:
自签名证书:自签名证书仅具有加密功能,无身份验证功能。您可以在命令行工具中使用HTTPS协议访问ASM网关,但是自签名证书不受Web浏览器的信任,Web浏览器检查HTTPS连接会标记为潜在风险并弹出错误消息,即无法在Web浏览器中使用HTTPS协议通过ASM网关访问服务。DNS域名证书:DNS域名证书由受信任的CA机构颁发,兼具加密和身份验证功能。相比自签名证书,DNS域名证书具有更高的安全性,受到Web浏览器的信任。您可以同时在命令行工具和Web浏览器中使用HTTPS协议通过ASM网关访问服务。在集群中安装cert-manager在本地安装Helm。
具体操作,请参见 Helm 。
使用kubectl连接集群。
具体操作,请参见 获取集群KubeConfig并通过kubectl工具连接集群 。
创建cert-manager命名空间
kubectl create namespace cert-manager添加cert-manager Chart。
helm repo add jetstack获取cert-manager Chart的最新信息。
helm repo update安装cert-manager。
说明 cert-manager的版本需要和Kubernetes版本保持兼容。关于cert-manager和Kubernetes版本的对应关系,请参见 Supported Releases 。
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.1.0 \ --set installCRDs=true使用cert-manager签发自签名证书步骤一:在集群中生成自签证书创建 issuer.yaml 。
apiVersion: cert-manager.io/v1kind: Issuermetadata: name: selfsignedspec: selfSigned: {}---apiVersion: cert-manager.io/v1kind: Certificatemetadata: name: istio-ingressgateway-certsspec: isCA: true duration: 2160h # 90d secretName: istio-ingressgateway-certs commonName: istio-ingressgateway-certs subject: organizations: - cluster.local - cert-manager issuerRef: name: selfsigned kind: Issuer group: cert-manager.io---apiVersion: cert-manager.io/v1kind: Issuermetadata: name: istio-ingressgateway-certsspec: ca: secretName: istio-ingressgateway-certs创建自签名CA来颁发工作负载证书。
kubectl apply -f issuer.yaml -n istio-system查看证书。
$. kubectl get secret -n istio-system # 预期输出: NAME TYPE DATA AGEistio-ingressgateway-certs kubernetes.io/tls 3 68m步骤二:添加证书和私钥挂载卷到入口网关登录 ASM控制台 ,在左侧导航栏,选择。在 网格管理 页面,单击目标实例名称,然后在左侧导航栏,选择。在 入口网关 页面的目标网关右侧,单击 查看YAML 。在 编辑 对话框,添加如下信息到 spec 字段。
secretVolumes: - mountPath: /etc/istio/ingressgateway-certs name: ingressgateway-certs secretName: istio-ingressgateway-certs
添加之后的YAML文件示例如下: 展开查看YAML
apiVersion: istio.alibabacloud.com/v1beta1kind: IstioGatewaymetadata: name: ingressgateway namespace: istio-systemspec: clusterIds: - c58638b491a5248669b59609e0a17**** cpu: {} externalTrafficPolicy: Local maxReplicas: 1 minReplicas: 1 ports: - name: status-port port: 15020 targetPort: 15020 - name: http2 nodePort: 31380 port: 80 targetPort: 80 - name: https nodePort: 31390 port: 443 targetPort: 443 - name: tls port: 15443 targetPort: 15443 replicaCount: 1 secretVolumes: - mountPath: /etc/istio/ingressgateway-certs name: ingressgateway-certs secretName: istio-ingressgateway-certs serviceAnnotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small serviceType: LoadBalancer步骤三:在集群中检查入口网关配置
添加证书和私钥挂载卷到入口网关后,入口网关会加载证书与密钥。
验证 tls.crt 与 tls.key
执行以下命令,验证 tls.crt 与 tls.key 已被挂载到入口网关Pod中。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- ls -al /etc/istio/ingressgateway-certs
预期输出:
lrwxrwxrwx 1 root root 14 May 9 01:14 tls.crt -> ..data/tls.crtlrwxrwxrwx 1 root root 14 May 9 01:14 tls.key -> ..data/tls.key检查Ingress gateway证书
执行以下命令,检查Ingress gateway证书中的 Subject 字段的正确性。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- cat /etc/istio/ingressgateway-certs/tls.crt | openssl x509 -text -noout | grep 'Subject:'
预期输出:
Subject: O = cert-manager + O = cluster.local, CN = istio-ingressgateway-certs检查Ingress gateway代理
执行以下命令,检查Ingress gateway的代理能够正确访问证书。
kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=ingressgateway -o jsonpath='{.items[0].metadata.name}') -- curl 127.0.0.1:15000/certs
预期输出:
{ "certificates": [ { "ca_cert": [ { "path": "\u003cinline\u003e", "serial_number": "4edcf3", "subject_alt_names": [], "days_until_expiration": "7251", "valid_from": "2022-01-06T06:17:00Z", "expiration_time": "2042-01-01T06:22:03Z" } ],...........步骤四:验证使用HTTPS协议访问服务是否成功在集群中创建服务。创建 myexample-nginx.conf
使用以下内容,创建 myexample-nginx.conf 。 本文示例服务基于Nginx实现,您需要为Nginx服务器创建配置文件,以域名 aliyun.com 的服务为例,以下内容定义请求根路径直接返回字样 Welcome to aliyun.com! 及状态码 200 。
events {}http { log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; server { listen 80; location / { return 200 'Welcome to aliyun.com!'; add_header Content-Type text/plain; } }}创建Nginx服务器的配置项。
kubectl create configmap \myexample-nginx-configmap \--from-file=nginx.conf=./myexample-nginx.conf启用Sidecar自动注入
执行以下命令,为命名空间default启用Sidecar自动注入。
kubectl label namespace default istio-injection=enabled创建 myexampleapp.yaml 。
apiVersion: v1kind: Servicemetadata: name: myexampleapp labels: app: myexampleappspec: ports: - port: 80 protocol: TCP selector: app: myexampleapp---apiVersion: apps/v1kind: Deploymentmetadata: name: myexampleappspec: selector: matchLabels: app: myexampleapp replicas: 1 template: metadata: labels: app: myexampleapp spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx readOnly: true volumes: - name: nginx-config configMap: name: myexample-nginx-configmap创建域名为 aliyun.com 的内部服务。
kubectl apply -f myexampleapp.yaml通过kubectl连接ASM。
具体操作,请参见 通过控制面kubectl访问Istio资源 。
在ASM中创建网关规则。创建 istio-myexample-customingressgateway.yaml 。
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata: name: istio-myexample-customingressgatewayspec: selector: istio: ingressgateway servers: - hosts: - '*.aliyun.com' port: name: http number: 80 protocol: HTTP tls: httpsRedirect: true - hosts: - '*.aliyun.com' port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE privateKey: /etc/istio/ingressgateway-certs/tls.key serverCertificate: /etc/istio/ingressgateway-certs/tls.crt执行以下命令,创建网关规则。
kubectl apply -f istio-myexample-customingressgateway.yaml在ASM中创建虚拟服务。创建 istio-myexample-customvirtualservice.yaml 。
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: istio-myexample-customvirtualservicespec: hosts: - "; gateways: - istio-myexample-customingressgateway http: - route: - destination: host: myexampleapp.default.svc.cluster.local port: number: 80执行以下命令,创建虚拟服务。
kubectl apply -f istio-myexample-customvirtualservice.yaml在集群中获取入口网关服务的地址。
kubectl get svc -n istio-system -l istio=ingressgateway通过HTTPS协议访问aliyun.com服务。
curl -k -H Host: --resolve :{替换成真实的入口网关IP地址}
预期输出:
Welcome to aliyun.com!
标签: #openssl查看cert文件