---
name: cwp-ssl
description: Gestão de certificados SSL no CWP com acme.sh nativo — emissão, renovação e troubleshooting baseado na documentação oficial.
disable-model-invocation: true
---

# /cwp-ssl - Gestão SSL CWP (Documentação Oficial)

Gestão de certificados SSL no CWP usando acme.sh nativo. **Zero assumptions, zero hallucinations** - apenas comandos documentados oficialmente.

**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.

---

## Servidor Alvo

| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |

---

## Documentação Base

- [AutoSSL CWP Wiki](https://docs.control-webpanel.com/docs/admin-guide/ssl/autossl)
- [acme.sh Documentation](https://wiki.centos-webpanel.com/)

### Documentação Hub (Consultar SEMPRE)

**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide + Wiki (seccoes SSL & Security, WebServers) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao AutoSSL) - **72KB**
- `CWP-Ferramentas-Desenvolvimento.md` - API AutoSSL (add/del/list/renew) - **82KB**

**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`

**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"ssl certificado autossl renovacao"
```

---

## Paths Oficiais (Documentados)

| Path | Descrição |
|------|-----------|
| `/root/.acme.sh/` | Instalação acme.sh |
| `/root/.acme.sh/cwp_certs/` | Certificados CWP |
| `/root/.acme.sh/acme.sh.log` | Log acme.sh |
| `/var/log/cwp/autossl.log` | Log AutoSSL CWP |
| `/usr/local/apache/autossl_tmp/` | **Webroot para validação SSL** |
| `/etc/pki/tls/certs/` | Certificados Nginx |
| `/etc/pki/tls/private/` | Chaves privadas Nginx |

---

## Scripts Oficiais

| Script | Descrição |
|--------|-----------|
| `/scripts/install_acme` | Instala/reinstala acme.sh |
| `/scripts/autossl_reload` | Reload AutoSSL |
| `/scripts/generate_hostname_ssl` | Gera SSL para hostname |
| `/scripts/hostname_ssl_restart_services` | Restart serviços após SSL hostname |

---

## Comandos Documentados

### Verificar Certificados Instalados

```bash
# Listar todos os certificados CWP
ls /root/.acme.sh/cwp_certs/
```

### Verificar Próxima Renovação

```bash
# Ver data de próxima renovação para um domínio
grep "Le_NextRenewTimeStr" /root/.acme.sh/cwp_certs/www.DOMINIO_ecc/www.DOMINIO.conf
```

### Forçar Renovação Manual

```bash
# COMANDO OFICIAL para forçar renovação
/root/.acme.sh/acme.sh --renew -d DOMINIO --force --home /root/.acme.sh/cwp_certs
```

### Verificar Certificado Activo

```bash
# Verificar validade de certificado em produção
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -dates
```

### Ver Logs de Renovação

```bash
# Log acme.sh
tail -100 /root/.acme.sh/acme.sh.log | grep DOMINIO

# Log AutoSSL CWP
tail -100 /var/log/cwp/autossl.log
```

---

## Cron de Renovação Automática

**Cron CWP (documentado):** `23 2 * * *` - Renovação diária às 02:23

```bash
# Verificar cron de renovação
crontab -l | grep -i acme
```

---

## Workflows

### 1. Listar Todos os Certificados

```bash
for d in $(ls /root/.acme.sh/cwp_certs/); do
  echo "=== $d ==="
  grep -E 'Le_NextRenewTimeStr|Le_Alt' /root/.acme.sh/cwp_certs/$d/*.conf 2>/dev/null | head -3
done
```

### 2. Verificar Certificados Expirando (<30 dias)

```bash
for d in $(ls /root/.acme.sh/cwp_certs/); do
  domain=$(echo $d | sed 's/_ecc$//')
  echo "=== $domain ==="
  echo | openssl s_client -connect $domain:443 2>/dev/null | openssl x509 -noout -dates
done 2>&1 | grep -A1 "notAfter"
```

### 3. Forçar Renovação de Domínio Específico

```bash
# Substituir DOMINIO pelo domínio real
/root/.acme.sh/acme.sh --renew -d DOMINIO --force --home /root/.acme.sh/cwp_certs
```

### 4. Reinstalar acme.sh (se corrompido)

```bash
# COMANDO OFICIAL
sh /scripts/install_acme
```

### 5. Gerar SSL para Hostname

```bash
# COMANDO OFICIAL
sh /scripts/generate_hostname_ssl
sh /scripts/hostname_ssl_restart_services
```

---

## Troubleshooting Documentado

### Renovação Falha - Muitos Subdomínios

**Problema:** `Le_Alt` contém muitos subdomínios (mail, ftp, cpanel) - qualquer falha bloqueia tudo.

**Solução documentada:**
```bash
# Editar .conf para ter apenas domínio principal
vi /root/.acme.sh/cwp_certs/www.DOMINIO_ecc/www.DOMINIO.conf
# Reduzir Le_Alt para apenas 'DOMINIO'
```

### Webroot Incorrecto

**Problema:** Validação falha porque ficheiro `.well-known/acme-challenge/` não é encontrado.

**Solução documentada:**
```bash
# O Nginx CWP serve validação de pasta GLOBAL, não do site
# Pasta correcta:
/usr/local/apache/autossl_tmp/

# NUNCA usar (não funciona):
/home/user/domain.pt/.well-known/
```

### Ver Erro Específico

```bash
tail -100 /root/.acme.sh/acme.sh.log | grep -E 'error|Error|ERRO'
```

---

## Anti-Patterns (NUNCA FAZER)

| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| **Usar certbot** | Conflito com acme.sh nativo | Usar acme.sh CWP |
| Incluir mail/ftp/cpanel em Le_Alt | Falha em cascata | Apenas domínio principal |
| Criar hooks manuais | Sobrescrito em update | Usar scripts oficiais |
| Editar certificados em /etc/pki/ | Sobrescrito | Editar em cwp_certs |

---

## Validação Pós-Operação

Após qualquer operação SSL, validar:

```bash
# 1. Certificado instalado correctamente
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -subject -dates

# 2. Sem erros no log
tail -20 /root/.acme.sh/acme.sh.log | grep -i error

# 3. Site acessível via HTTPS
curl -sI https://DOMINIO | head -5
```

---

## Thresholds de Alerta

| Condição | Status | Acção |
|----------|--------|-------|
| Expira >30 dias | OK | Nenhuma |
| Expira 15-30 dias | Warning | Monitorizar |
| Expira <15 dias | **Crítico** | Renovar imediatamente |
| Expirado | **Urgente** | Forçar renovação |

---

## Checklist de Execução

- [ ] Verificar domínio existe em cwp_certs
- [ ] Verificar webroot está acessível
- [ ] Executar comando de renovação se necessário
- [ ] Validar certificado após operação
- [ ] Verificar logs sem erros

---

**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** Documentação oficial CWP (docs.control-webpanel.com, wiki.centos-webpanel.com)
