Чтобы любой интерфейс для его объектов обновлялся функцией, вам нужно передать объект по ссылке.
package main
import "fmt"
type B struct {
c int
}
type A struct {
b B
}
func (a *A) updateB(n int) {
a.b.c = n
}
func main() {
a := A{b: B{c: 5}}
fmt.Println(a)
a.updateB(42)
fmt.Println(a)
}
Кто-то еще не может только скопировать Ваш сертификат и использовать его, потому что у них нет Вашего закрытого ключа.
Если Вы не проверяете, что CN сертификата не соответствует доменному имени затем, они могут просто создать свой собственный сертификат (и иметь подписанный доверяемым CA, таким образом, это выглядит допустимым), используйте его на месте ваш, и выполните человека в среднем нападении.
Кроме того, необходимо проверять, что сертификат прибывает из доверяемого Приблизительно. Это - задание CA, чтобы удостовериться, что можно только получить сертификат с CN = при фактическом управлении тем доменом.
При пропуске любой из этих проверок затем, Вы подвергаетесь риску нападения MITM.
См. также этот ответ для другого подхода, который будет работать, если Вы будете иметь достаточный контроль над клиентом.
0,02$: использование CN для имен хостов удерживается от использования, Альтернативные названия Предмета X.509 должны использоваться вместо этого.
Чтобы сделать то же самое с "пользовательскими настройками DNS" взломщик должно использовать сервер DNS (Ваш или клиент) для указания на example.com на IP, которым он управляет, в противоположность просто копированию сертификата. Если возможный я создал бы все определенные приложения как субдомены example.com и использовал бы Wildcard-сертификат (*.example.com), чтобы смочь проверить CN.
Если Вы управляете клиентским кодом, то можно ограничить доверяемую АВАРИЮ просто собственным. Затем доменная проверка менее важна - любой из Ваших серверов может симулировать быть другим.
Если Вы не управляете клиентским кодом, то сертификатом, подписанным доверяемым CA, можно заменить Ваш.
Проверка имени хоста (проверяющий часть CN) гарантирует, что другой конец соединения (сервер) имеет сертификат SSL проблемы с доменным именем, которое Вы ввели в строке поиска. Обычно взломщик не сможет получить такой сертификат.
Если Вы не проверяете часть имени хоста, кто-то (кто-то сидит в любом из маршрутизаторов, или проксирует передачи запроса, хотя), мог сделать человека в среднем нападении. Или кто-то мог сделать, используют некоторые нападения DNS.